i40e: Fix for extra Flow Director filter in table after error
This patch fixes a problem where the PF's fdir filter table would have an entry that the hw was unable to add. This notification happens in the hot path, so instead of trying to fix it then, we note the location in the failure case and delete it during regular fdir subtask callback. Without this patch, a case can occur where an invalid entry gets replayed and a valid one is not. Change-ID: I67831c183b5d0309876de807cc434809b74c9cb7 Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com> Signed-off-by: Shannon Nelson <shannon.nelson@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
committed by
Jeff Kirsher
parent
1a9375eb7f
commit
3487b6c30c
@@ -5614,7 +5614,9 @@ u32 i40e_get_global_fd_count(struct i40e_pf *pf)
|
||||
**/
|
||||
void i40e_fdir_check_and_reenable(struct i40e_pf *pf)
|
||||
{
|
||||
struct i40e_fdir_filter *filter;
|
||||
u32 fcnt_prog, fcnt_avail;
|
||||
struct hlist_node *node;
|
||||
|
||||
if (test_bit(__I40E_FD_FLUSH_REQUESTED, &pf->state))
|
||||
return;
|
||||
@@ -5643,6 +5645,18 @@ void i40e_fdir_check_and_reenable(struct i40e_pf *pf)
|
||||
dev_info(&pf->pdev->dev, "ATR is being enabled since we have space in the table now\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* if hw had a problem adding a filter, delete it */
|
||||
if (pf->fd_inv > 0) {
|
||||
hlist_for_each_entry_safe(filter, node,
|
||||
&pf->fdir_filter_list, fdir_node) {
|
||||
if (filter->fd_id == pf->fd_inv) {
|
||||
hlist_del(&filter->fdir_node);
|
||||
kfree(filter);
|
||||
pf->fdir_pf_active_filters--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#define I40E_MIN_FD_FLUSH_INTERVAL 10
|
||||
|
||||
Reference in New Issue
Block a user