patch 'hash: fix thash LFSR initialization' has been queued to stable release 21.11.9
Kevin Traynor
ktraynor at redhat.com
Wed Nov 27 18:18:14 CET 2024
Hi,
FYI, your patch has been queued to stable release 21.11.9
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/02/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/kevintraynor/dpdk-stable
This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/23128ef43fd91441d18b8a4651964c4a75e7b4d4
Thanks.
Kevin
---
>From 23128ef43fd91441d18b8a4651964c4a75e7b4d4 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 2b97482cfb..c14e594914 100644
--- a/lib/hash/rte_thash.c
+++ b/lib/hash/rte_thash.c
@@ -162,4 +162,28 @@ thash_get_rand_poly(uint32_t 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)
@@ -181,5 +205,5 @@ alloc_lfsr(struct rte_thash_ctx *ctx)
} 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;
--
2.47.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2024-11-27 17:17:40.378398637 +0000
+++ 0067-hash-fix-thash-LFSR-initialization.patch 2024-11-27 17:17:38.260269554 +0000
@@ -1 +1 @@
-From ebf7f1188ea83d6154746e90d535392113ecb1e8 Mon Sep 17 00:00:00 2001
+From 23128ef43fd91441d18b8a4651964c4a75e7b4d4 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 2b97482cfb..c14e594914 100644
@@ -22 +23 @@
-@@ -167,4 +167,28 @@ thash_get_rand_poly(uint32_t poly_degree)
+@@ -162,4 +162,28 @@ thash_get_rand_poly(uint32_t poly_degree)
@@ -51 +52 @@
-@@ -186,5 +210,5 @@ alloc_lfsr(struct rte_thash_ctx *ctx)
+@@ -181,5 +205,5 @@ alloc_lfsr(struct rte_thash_ctx *ctx)
More information about the stable
mailing list