From: Konstantin Ananyev <konstantin.ananyev@intel.com>
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/?a=commitdiff_plain;h=faea1ce70c77ee5ec95fe7c2fb79265fd5b3dcb1;p=dpdk.git

acl: fix invalid rule wildness calculation for bitmask field type

Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
---

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;