summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Richardson <bruce.richardson@intel.com>2014-12-04 14:24:12 +0000
committerThomas Monjalon <thomas.monjalon@6wind.com>2014-12-05 16:55:00 +0100
commit58507670cf1a4832eba725eba872d57b81d85491 (patch)
treec0912ef5e8c96f499a954ba41a185f727a114dc0
parente689a63caa4ebd43367b67601384066234525fb5 (diff)
downloaddpdk-58507670cf1a4832eba725eba872d57b81d85491.zip
dpdk-58507670cf1a4832eba725eba872d57b81d85491.tar.gz
dpdk-58507670cf1a4832eba725eba872d57b81d85491.tar.xz
table: fix lookup with incomplete bitmask
When a lookup was done on a table_array structure with an incomplete bitmask, the results was always zero hits. This was because the pkts_mask value was cleared as we process each entry, and the result was assigned at the end of the loop, when pkts_mask was zero. Changing the assignment to occur at the start, before the pkts_mask gets cleared, fixes this issue. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> Acked by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
-rw-r--r--lib/librte_table/rte_table_array.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/librte_table/rte_table_array.c b/lib/librte_table/rte_table_array.c
index 0b1d42a..4d3c05e 100644
--- a/lib/librte_table/rte_table_array.c
+++ b/lib/librte_table/rte_table_array.c
@@ -164,6 +164,8 @@ rte_table_array_lookup(
{
struct rte_table_array *t = (struct rte_table_array *) table;
+ *lookup_hit_mask = pkts_mask;
+
if ((pkts_mask & (pkts_mask + 1)) == 0) {
uint64_t n_pkts = __builtin_popcountll(pkts_mask);
uint32_t i;
@@ -190,8 +192,6 @@ rte_table_array_lookup(
}
}
- *lookup_hit_mask = pkts_mask;
-
return 0;
}