|
|
@@ -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
|