From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jiri Pirko Subject: Re: [PATCH net 2/2] nfp: reject binding to shared blocks Date: Mon, 25 Jun 2018 22:40:21 +0200 Message-ID: <20180625204021.GE2161@nanopsycho> References: <20180625202246.28871-1-jakub.kicinski@netronome.com> <20180625202246.28871-3-jakub.kicinski@netronome.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: davem@davemloft.net, oss-drivers@netronome.com, netdev@vger.kernel.org, John Hurley To: Jakub Kicinski Return-path: Received: from mail-wm0-f65.google.com ([74.125.82.65]:36842 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965067AbeFYUlm (ORCPT ); Mon, 25 Jun 2018 16:41:42 -0400 Received: by mail-wm0-f65.google.com with SMTP id u18-v6so6929603wmc.1 for ; Mon, 25 Jun 2018 13:41:42 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180625202246.28871-3-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org List-ID: Mon, Jun 25, 2018 at 10:22:46PM CEST, jakub.kicinski@netronome.com wrote: >From: John Hurley > >TC shared blocks allow multiple qdiscs to be grouped together and filters >shared between them. Currently the chains of filters attached to a block >are only flushed when the block is removed. If a qdisc is removed from a >block but the block still exists, flow del messages are not passed to the >callback registered for that qdisc. For the NFP, this presents the >possibility of rules still existing in hw when they should be removed. > >Prevent binding to shared blocks until the kernel can send per qdisc del >messages when block unbinds occur. This is not nfp-specific problem. Should be handled differently. The driver has information about offloaded filters. On unbind, it have enough info to do the flush, doesn't it? > >Fixes: 4861738775d7 ("net: sched: introduce shared filter blocks infrastructure") >Signed-off-by: John Hurley >Signed-off-by: Jakub Kicinski >Reviewed-by: Simon Horman >--- > drivers/net/ethernet/netronome/nfp/bpf/main.c | 3 +++ > drivers/net/ethernet/netronome/nfp/flower/offload.c | 3 +++ > 2 files changed, 6 insertions(+) > >diff --git a/drivers/net/ethernet/netronome/nfp/bpf/main.c b/drivers/net/ethernet/netronome/nfp/bpf/main.c >index fcdfb8e7fdea..6b15e3b11956 100644 >--- a/drivers/net/ethernet/netronome/nfp/bpf/main.c >+++ b/drivers/net/ethernet/netronome/nfp/bpf/main.c >@@ -202,6 +202,9 @@ static int nfp_bpf_setup_tc_block(struct net_device *netdev, > if (f->binder_type != TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS) > return -EOPNOTSUPP; > >+ if (tcf_block_shared(f->block)) >+ return -EOPNOTSUPP; >+ > switch (f->command) { > case TC_BLOCK_BIND: > return tcf_block_cb_register(f->block, >diff --git a/drivers/net/ethernet/netronome/nfp/flower/offload.c b/drivers/net/ethernet/netronome/nfp/flower/offload.c >index 477f584f6d28..525057bee0ed 100644 >--- a/drivers/net/ethernet/netronome/nfp/flower/offload.c >+++ b/drivers/net/ethernet/netronome/nfp/flower/offload.c >@@ -631,6 +631,9 @@ static int nfp_flower_setup_tc_block(struct net_device *netdev, > if (f->binder_type != TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS) > return -EOPNOTSUPP; > >+ if (tcf_block_shared(f->block)) >+ return -EOPNOTSUPP; >+ > switch (f->command) { > case TC_BLOCK_BIND: > return tcf_block_cb_register(f->block, >-- >2.17.1 >