From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9BA1AC282D8 for ; Fri, 1 Feb 2019 23:14:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 72D592148D for ; Fri, 1 Feb 2019 23:14:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726757AbfBAXO0 (ORCPT ); Fri, 1 Feb 2019 18:14:26 -0500 Received: from www62.your-server.de ([213.133.104.62]:59286 "EHLO www62.your-server.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725803AbfBAXOZ (ORCPT ); Fri, 1 Feb 2019 18:14:25 -0500 Received: from [78.46.172.3] (helo=sslproxy06.your-server.de) by www62.your-server.de with esmtpsa (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (Exim 4.89_1) (envelope-from ) id 1gpi0q-00071N-Dk; Sat, 02 Feb 2019 00:14:20 +0100 Received: from [178.197.249.18] (helo=linux.home) by sslproxy06.your-server.de with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.89) (envelope-from ) id 1gpi0q-000DkN-7N; Sat, 02 Feb 2019 00:14:20 +0100 Subject: Re: Co-existing XDP generic and native mode? (Re: [PATCH bpf-next v5 5/8] xdp: Provide extack messages when prog attachment failed) To: Jakub Kicinski Cc: Jesper Dangaard Brouer , ast@kernel.org, David Miller , Maciej Fijalkowski , netdev@vger.kernel.org, john.fastabend@gmail.com, David Ahern , Saeed Mahameed References: <20190201001954.4130-1-maciej.fijalkowski@intel.com> <20190201001954.4130-6-maciej.fijalkowski@intel.com> <20190131191101.2e9dc9f6@cakuba.hsd1.ca.comcast.net> <20190201080236.446d84d4@redhat.com> <20190201104738.7a3b33d6@cakuba.hsd1.ca.comcast.net> <20190201134403.44131386@cakuba.hsd1.ca.comcast.net> From: Daniel Borkmann Message-ID: <3fd3b387-9a90-fa94-dcdf-5ebe9e82f81a@iogearbox.net> Date: Sat, 2 Feb 2019 00:14:19 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: <20190201134403.44131386@cakuba.hsd1.ca.comcast.net> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Authenticated-Sender: daniel@iogearbox.net X-Virus-Scanned: Clear (ClamAV 0.100.2/25347/Fri Feb 1 12:05:35 2019) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On 02/01/2019 10:44 PM, Jakub Kicinski wrote: [...] > diff --git a/net/core/dev.c b/net/core/dev.c > index 8e276e0192a1..ce4880e5e95d 100644 > --- a/net/core/dev.c > +++ b/net/core/dev.c > @@ -7976,11 +7976,13 @@ int dev_change_xdp_fd(struct net_device *dev, struct netlink_ext_ack *extack, > enum bpf_netdev_command query; > struct bpf_prog *prog = NULL; > bpf_op_t bpf_op, bpf_chk; > + bool offload; > int err; > > ASSERT_RTNL(); > > - query = flags & XDP_FLAGS_HW_MODE ? XDP_QUERY_PROG_HW : XDP_QUERY_PROG; > + offload = flags & XDP_FLAGS_HW_MODE; > + query = offload ? XDP_QUERY_PROG_HW : XDP_QUERY_PROG; > > bpf_op = bpf_chk = ops->ndo_bpf; > if (!bpf_op && (flags & (XDP_FLAGS_DRV_MODE | XDP_FLAGS_HW_MODE))) > @@ -7991,8 +7993,7 @@ int dev_change_xdp_fd(struct net_device *dev, struct netlink_ext_ack *extack, > bpf_chk = generic_xdp_install; > > if (fd >= 0) { > - if (__dev_xdp_query(dev, bpf_chk, XDP_QUERY_PROG) || > - __dev_xdp_query(dev, bpf_chk, XDP_QUERY_PROG_HW)) > + if (!offload && __dev_xdp_query(dev, bpf_chk, XDP_QUERY_PROG)) > return -EEXIST; > if ((flags & XDP_FLAGS_UPDATE_IF_NOEXIST) && > __dev_xdp_query(dev, bpf_op, query)) > @@ -8003,8 +8004,7 @@ int dev_change_xdp_fd(struct net_device *dev, struct netlink_ext_ack *extack, > if (IS_ERR(prog)) > return PTR_ERR(prog); > > - if (!(flags & XDP_FLAGS_HW_MODE) && > - bpf_prog_is_dev_bound(prog->aux)) { > + if (!offload && bpf_prog_is_dev_bound(prog->aux)) { > NL_SET_ERR_MSG(extack, "using device-bound program without HW_MODE flag is not supported"); > bpf_prog_put(prog); > return -EINVAL; > > Do you think we shouldn't do it? Yeah that looks good to me, lets do it. At least this would allow for prototyping in combination with HW mode till full support of a feature has landed properly in native mode. Thanks, Daniel