From: Konstantin Ananyev Date: Mon, 8 Jun 2015 10:41:23 +0000 (+0100) Subject: acl: fix invalid rule wildness calculation for bitmask field type X-Git-Tag: spdx-start~9049 X-Git-Url: http://git.droids-corp.org/?p=dpdk.git;a=commitdiff_plain;h=faea1ce70c77ee5ec95fe7c2fb79265fd5b3dcb1 acl: fix invalid rule wildness calculation for bitmask field type Signed-off-by: Konstantin Ananyev --- diff --git a/lib/librte_acl/acl_bld.c b/lib/librte_acl/acl_bld.c index 3801843909..aee6ed573a 100644 --- a/lib/librte_acl/acl_bld.c +++ b/lib/librte_acl/acl_bld.c @@ -1362,6 +1362,9 @@ acl_calc_wildness(struct rte_acl_build_rule *head, for (n = 0; n < config->num_fields; n++) { double wild = 0; + uint64_t msk_val = + RTE_LEN2MASK(CHAR_BIT * config->defs[n].size, + typeof(msk_val)); double size = CHAR_BIT * config->defs[n].size; int field_index = config->defs[n].field_index; const struct rte_acl_field *fld = rule->f->field + @@ -1369,8 +1372,8 @@ acl_calc_wildness(struct rte_acl_build_rule *head, switch (rule->config->defs[n].type) { case RTE_ACL_FIELD_TYPE_BITMASK: - wild = (size - __builtin_popcount( - fld->mask_range.u8)) / + wild = (size - __builtin_popcountll( + fld->mask_range.u64 & msk_val)) / size; break;