ACL entry creation reserves a bitmap slot before programming hardware.
If programming fails, the reserved slot is not restored, so repeated
failures consume the available slots. The slot is also left reserved
when it exceeds the supported entry limit.

Restore the bitmap slot on both failure paths. Keep it reserved only
when entry creation succeeds.

Fixes: 40d466fa9f76 ("net/ice: support ACL filter in DCF")
Cc: [email protected]

Signed-off-by: Anatoly Burakov <[email protected]>
---
 drivers/net/intel/ice/ice_acl_filter.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/intel/ice/ice_acl_filter.c 
b/drivers/net/intel/ice/ice_acl_filter.c
index a91bd558f3..eb5d88ccc5 100644
--- a/drivers/net/intel/ice/ice_acl_filter.c
+++ b/drivers/net/intel/ice/ice_acl_filter.c
@@ -462,6 +462,7 @@ ice_acl_hw_set_conf(struct ice_pf *pf, struct ice_fdir_fltr 
*input,
                                         acts, act_cnt, &hw_entry);
                if (ret) {
                        PMD_DRV_LOG(ERR, "Fail to add entry.");
+                       rte_bitmap_set(pf->acl.slots, slot_id);
                        return ret;
                }
                rule->entry_id[entry_idx] = entry_id;
@@ -469,6 +470,7 @@ ice_acl_hw_set_conf(struct ice_pf *pf, struct ice_fdir_fltr 
*input,
        } else {
                PMD_DRV_LOG(ERR, "Exceed the maximum entry number(%d)"
                            " HW supported!", MAX_ACL_NORMAL_ENTRIES);
+               rte_bitmap_set(pf->acl.slots, slot_id);
                return -1;
        }
 
-- 
2.52.0

Reply via email to