From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jakub Kicinski Subject: [RFC net-next 1/8] pkt_cls: make tc_can_offload_extack() check chain index Date: Tue, 23 Jan 2018 13:33:33 -0800 Message-ID: <20180123213340.19235-2-jakub.kicinski@netronome.com> References: <20180123213340.19235-1-jakub.kicinski@netronome.com> Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, dsahern@gmail.com, Jakub Kicinski To: jiri@resnulli.us Return-path: Received: from mail-pf0-f195.google.com ([209.85.192.195]:45572 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752455AbeAWVdx (ORCPT ); Tue, 23 Jan 2018 16:33:53 -0500 Received: by mail-pf0-f195.google.com with SMTP id a88so1333978pfe.12 for ; Tue, 23 Jan 2018 13:33:53 -0800 (PST) In-Reply-To: <20180123213340.19235-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org List-ID: No upstream drivers seem to allow offload of chains other than 0. Save driver developers typing and make tc_can_offload_extack() check for that condition as well. Rename the function to tc_can_offload_cls() to better represent its application. Signed-off-by: Jakub Kicinski --- drivers/net/ethernet/netronome/nfp/bpf/main.c | 4 +--- drivers/net/netdevsim/bpf.c | 5 +---- include/net/pkt_cls.h | 20 +++++++++++++------- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/bpf/main.c b/drivers/net/ethernet/netronome/nfp/bpf/main.c index b3206855535a..552e2657b536 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/main.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/main.c @@ -130,7 +130,7 @@ static int nfp_bpf_setup_tc_block_cb(enum tc_setup_type type, "only offload of BPF classifiers supported"); return -EOPNOTSUPP; } - if (!tc_can_offload_extack(nn->dp.netdev, cls_bpf->common.extack)) + if (!tc_can_offload_cls(nn->dp.netdev, &cls_bpf->common)) return -EOPNOTSUPP; if (!nfp_net_ebpf_capable(nn)) { NL_SET_ERR_MSG_MOD(cls_bpf->common.extack, @@ -142,8 +142,6 @@ static int nfp_bpf_setup_tc_block_cb(enum tc_setup_type type, "only ETH_P_ALL supported as filter protocol"); return -EOPNOTSUPP; } - if (cls_bpf->common.chain_index) - return -EOPNOTSUPP; /* Only support TC direct action */ if (!cls_bpf->exts_integrated || diff --git a/drivers/net/netdevsim/bpf.c b/drivers/net/netdevsim/bpf.c index 8166f121bbcc..bbcb8ec42208 100644 --- a/drivers/net/netdevsim/bpf.c +++ b/drivers/net/netdevsim/bpf.c @@ -135,7 +135,7 @@ int nsim_bpf_setup_tc_block_cb(enum tc_setup_type type, return -EOPNOTSUPP; } - if (!tc_can_offload_extack(ns->netdev, cls_bpf->common.extack)) + if (!tc_can_offload_cls(ns->netdev, &cls_bpf->common)) return -EOPNOTSUPP; if (cls_bpf->common.protocol != htons(ETH_P_ALL)) { @@ -144,9 +144,6 @@ int nsim_bpf_setup_tc_block_cb(enum tc_setup_type type, return -EOPNOTSUPP; } - if (cls_bpf->common.chain_index) - return -EOPNOTSUPP; - if (!ns->bpf_tc_accept) { NSIM_EA(cls_bpf->common.extack, "netdevsim configured to reject BPF TC offload"); diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h index 1a41513cec7f..84932226da67 100644 --- a/include/net/pkt_cls.h +++ b/include/net/pkt_cls.h @@ -645,15 +645,21 @@ static inline bool tc_can_offload(const struct net_device *dev) return dev->features & NETIF_F_HW_TC; } -static inline bool tc_can_offload_extack(const struct net_device *dev, - struct netlink_ext_ack *extack) +static inline bool tc_can_offload_cls(const struct net_device *dev, + struct tc_cls_common_offload *common) { - bool can = tc_can_offload(dev); - - if (!can) - NL_SET_ERR_MSG(extack, "TC offload is disabled on net device"); + if (common->chain_index) { + NL_SET_ERR_MSG(common->extack, + "Driver supports only offload of chain 0"); + return false; + } + if (!tc_can_offload(dev)) { + NL_SET_ERR_MSG(common->extack, + "TC offload is disabled on net device"); + return false; + } - return can; + return true; } static inline bool tc_skip_hw(u32 flags) -- 2.15.1