diff mbox series

[next-queue,8/8] igb: Add support for removing offloaded tc-flower filters

Message ID 20180224012036.5834-9-vinicius.gomes@intel.com
State Changes Requested
Headers show
Series igb: offloading of receive filters | expand

Commit Message

Vinicius Costa Gomes Feb. 24, 2018, 1:20 a.m. UTC
This allows tc-flower filters that were offloaded to be removed.

Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
---
 drivers/net/ethernet/intel/igb/igb_main.c | 32 ++++++++++++++++++++++++++++++-
 1 file changed, 31 insertions(+), 1 deletion(-)

Comments

Florian Fainelli Feb. 24, 2018, 4:36 a.m. UTC | #1
On February 23, 2018 5:20:36 PM PST, Vinicius Costa Gomes <vinicius.gomes@intel.com> wrote:
>This allows tc-flower filters that were offloaded to be removed.

This should be squashed into your previous patch, either the functionality is there and you can add/remove or it is not.
Vinicius Costa Gomes Feb. 26, 2018, 8:59 p.m. UTC | #2
Hi,

Florian Fainelli <f.fainelli@gmail.com> writes:

> On February 23, 2018 5:20:36 PM PST, Vinicius Costa Gomes <vinicius.gomes@intel.com> wrote:
>>This allows tc-flower filters that were offloaded to be removed.
>
> This should be squashed into your previous patch, either the
> functionality is there and you can add/remove or it is not.

Will do. Thanks.

>
> -- 
> Florian


Cheers,
--
Vinicius
diff mbox series

Patch

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,