patch 'hash: fix thash LFSR initialization' has been queued to stable release 22.11.7

luca.boccassi at gmail.com luca.boccassi at gmail.com
Wed Oct 23 23:16:55 CEST 2024


Hi,

FYI, your patch has been queued to stable release 22.11.7

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/25/24. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/bluca/dpdk-stable

This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/fec66c08d4227a36d2965f5097d384ae5759d81a

Thanks.

Luca Boccassi

---
>From fec66c08d4227a36d2965f5097d384ae5759d81a Mon Sep 17 00:00:00 2001
From: Vladimir Medvedkin <vladimir.medvedkin at intel.com>
Date: Fri, 6 Sep 2024 17:01:41 +0000
Subject: [PATCH] hash: fix thash LFSR initialization

[ upstream commit ebf7f1188ea83d6154746e90d535392113ecb1e8 ]

Reverse polynomial for an LFSR was initialized improperly which
could generate improper bit sequence in some situations.
This patch implements proper polynomial reversing function.

Fixes: 28ebff11c2dc ("hash: add predictable RSS")

Signed-off-by: Vladimir Medvedkin <vladimir.medvedkin at intel.com>
---
 lib/hash/rte_thash.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/lib/hash/rte_thash.c b/lib/hash/rte_thash.c
index 2228af576b..363603c102 100644
--- a/lib/hash/rte_thash.c
+++ b/lib/hash/rte_thash.c
@@ -160,6 +160,30 @@ thash_get_rand_poly(uint32_t poly_degree)
 		RTE_DIM(irreducible_poly_table[poly_degree])];
 }
 
+static inline uint32_t
+get_rev_poly(uint32_t poly, int degree)
+{
+	int i;
+	/*
+	 * The implicit highest coefficient of the polynomial
+	 * becomes the lowest after reversal.
+	 */
+	uint32_t rev_poly = 1;
+	uint32_t mask = (1 << degree) - 1;
+
+	/*
+	 * Here we assume "poly" argument is an irreducible polynomial,
+	 * thus the lowest coefficient of the "poly" must always be equal to "1".
+	 * After the reversal, this the lowest coefficient becomes the highest and
+	 * it is omitted since the highest coefficient is implicitly determined by
+	 * degree of the polynomial.
+	 */
+	for (i = 1; i < degree; i++)
+		rev_poly |= ((poly >> i) & 0x1) << (degree - i);
+
+	return rev_poly & mask;
+}
+
 static struct thash_lfsr *
 alloc_lfsr(struct rte_thash_ctx *ctx)
 {
@@ -179,7 +203,7 @@ alloc_lfsr(struct rte_thash_ctx *ctx)
 		lfsr->state = rte_rand() & ((1 << lfsr->deg) - 1);
 	} while (lfsr->state == 0);
 	/* init reverse order polynomial */
-	lfsr->rev_poly = (lfsr->poly >> 1) | (1 << (lfsr->deg - 1));
+	lfsr->rev_poly = get_rev_poly(lfsr->poly, lfsr->deg);
 	/* init proper rev_state*/
 	lfsr->rev_state = lfsr->state;
 	for (i = 0; i <= lfsr->deg; i++)
-- 
2.45.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2024-10-23 22:16:43.371890184 +0100
+++ 0075-hash-fix-thash-LFSR-initialization.patch	2024-10-23 22:16:40.555944919 +0100
@@ -1 +1 @@
-From ebf7f1188ea83d6154746e90d535392113ecb1e8 Mon Sep 17 00:00:00 2001
+From fec66c08d4227a36d2965f5097d384ae5759d81a Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit ebf7f1188ea83d6154746e90d535392113ecb1e8 ]
+
@@ -11 +12,0 @@
-Cc: stable at dpdk.org
@@ -19 +20 @@
-index 10721effe6..99a685f0c8 100644
+index 2228af576b..363603c102 100644
@@ -22 +23 @@
-@@ -166,6 +166,30 @@ thash_get_rand_poly(uint32_t poly_degree)
+@@ -160,6 +160,30 @@ thash_get_rand_poly(uint32_t poly_degree)
@@ -53 +54 @@
-@@ -185,7 +209,7 @@ alloc_lfsr(struct rte_thash_ctx *ctx)
+@@ -179,7 +203,7 @@ alloc_lfsr(struct rte_thash_ctx *ctx)


More information about the stable mailing list