On Thu, Dec 04, 2014 at 02:23:33PM +0000, Bruce Richardson wrote: > Hi Cristian, please review before I send out publically. Thanks. B. > ------------------------- > > 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 at intel.com>
Self-nak on this copy, please see follow-on without the review request to Cristian (who can hopefully ack this soon :-) ) > --- > lib/librte_table/rte_table_array.c | 4 ++-- > 1 file 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; > } > > -- > 1.9.3 >