This allows tc-flower filters that were offloaded to be removed. Signed-off-by: Vinicius Costa Gomes <vinicius.go...@intel.com> --- drivers/net/ethernet/intel/igb/igb_main.c | 32 ++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index b1d401e77d62..5e0e1df0e941 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -2641,10 +2641,40 @@ static int igb_configure_clsflower(struct igb_adapter *adapter, return err; } +static int igb_delete_filter_by_cookie(struct igb_adapter *adapter, + unsigned long cookie) +{ + struct igb_nfc_filter *filter; + int err; + + spin_lock(&adapter->nfc_lock); + + hlist_for_each_entry(filter, &adapter->nfc_filter_list, nfc_node) { + if (filter->cookie == cookie) + break; + } + + if (!filter) { + err = -ENOENT; + goto out; + } + + err = igb_erase_filter(adapter, filter); + + hlist_del(&filter->nfc_node); + kfree(filter); + adapter->nfc_filter_count--; + +out: + spin_unlock(&adapter->nfc_lock); + + return err; +} + static int igb_delete_clsflower(struct igb_adapter *adapter, struct tc_cls_flower_offload *cls_flower) { - return -EOPNOTSUPP; + return igb_delete_filter_by_cookie(adapter, cls_flower->cookie); } static int igb_setup_tc_cls_flower(struct igb_adapter *adapter, -- 2.16.2