From: kbuild test robot <lkp@intel.com>
To: "Toke Høiland-Jørgensen" <toke@redhat.com>
Cc: kbuild-all@01.org, Daniel Borkmann <daniel@iogearbox.net>,
Alexei Starovoitov <ast@kernel.org>,
Martin KaFai Lau <kafai@fb.com>, Song Liu <songliubraving@fb.com>,
Yonghong Song <yhs@fb.com>,
Marek Majkowski <marek@cloudflare.com>,
Lorenz Bauer <lmb@cloudflare.com>,
David Miller <davem@davemloft.net>,
Jesper Dangaard Brouer <brouer@redhat.com>,
netdev@vger.kernel.org, bpf@vger.kernel.org
Subject: Re: [PATCH bpf-next 3/9] xdp: Support setting and getting device chain map
Date: Thu, 3 Oct 2019 02:29:04 +0800 [thread overview]
Message-ID: <201910030231.CSqo46St%lkp@intel.com> (raw)
In-Reply-To: <157002302784.1302756.2073486805381846919.stgit@alrua-x1>
[-- Attachment #1: Type: text/plain, Size: 5992 bytes --]
Hi "Toke,
I love your patch! Yet something to improve:
[auto build test ERROR on bpf-next/master]
url: https://github.com/0day-ci/linux/commits/Toke-H-iland-J-rgensen/xdp-Support-multiple-programs-on-a-single-interface-through-chain-calls/20191003-005238
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
config: x86_64-randconfig-s2-201939 (attached as .config)
compiler: gcc-5 (Ubuntu 5.5.0-12ubuntu1) 5.5.0 20171010
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
net/core/dev.c: In function 'dev_xdp_uninstall':
net/core/dev.c:8187:3: error: implicit declaration of function 'bpf_map_put_with_uref' [-Werror=implicit-function-declaration]
bpf_map_put_with_uref(chain_map);
^
net/core/dev.c: In function 'dev_change_xdp_fd':
>> net/core/dev.c:8286:15: error: implicit declaration of function 'bpf_map_get_with_uref' [-Werror=implicit-function-declaration]
chain_map = bpf_map_get_with_uref(chain_map_fd);
^
net/core/dev.c:8286:13: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
chain_map = bpf_map_get_with_uref(chain_map_fd);
^
cc1: some warnings being treated as errors
vim +/bpf_map_get_with_uref +8286 net/core/dev.c
8177
8178 static void dev_xdp_uninstall(struct net_device *dev)
8179 {
8180 struct bpf_map *chain_map = NULL;
8181 struct netdev_bpf xdp;
8182 bpf_op_t ndo_bpf;
8183
8184 /* Remove chain map */
8185 rcu_swap_protected(dev->xdp_chain_map, chain_map, 1);
8186 if(chain_map)
> 8187 bpf_map_put_with_uref(chain_map);
8188
8189 /* Remove generic XDP */
8190 WARN_ON(dev_xdp_install(dev, generic_xdp_install, NULL, 0, NULL));
8191
8192 /* Remove from the driver */
8193 ndo_bpf = dev->netdev_ops->ndo_bpf;
8194 if (!ndo_bpf)
8195 return;
8196
8197 memset(&xdp, 0, sizeof(xdp));
8198 xdp.command = XDP_QUERY_PROG;
8199 WARN_ON(ndo_bpf(dev, &xdp));
8200 if (xdp.prog_id)
8201 WARN_ON(dev_xdp_install(dev, ndo_bpf, NULL, xdp.prog_flags,
8202 NULL));
8203
8204 /* Remove HW offload */
8205 memset(&xdp, 0, sizeof(xdp));
8206 xdp.command = XDP_QUERY_PROG_HW;
8207 if (!ndo_bpf(dev, &xdp) && xdp.prog_id)
8208 WARN_ON(dev_xdp_install(dev, ndo_bpf, NULL, xdp.prog_flags,
8209 NULL));
8210 }
8211
8212 /**
8213 * dev_change_xdp_fd - set or clear a bpf program for a device rx path
8214 * @dev: device
8215 * @extack: netlink extended ack
8216 * @prog_fd: new program fd or negative value to clear
8217 * @chain_map_fd: new chain map fd or negative value to clear
8218 * @flags: xdp-related flags
8219 *
8220 * Set or clear a bpf program for a device
8221 */
8222 int dev_change_xdp_fd(struct net_device *dev, struct netlink_ext_ack *extack,
8223 int prog_fd, int chain_map_fd, u32 flags)
8224 {
8225 const struct net_device_ops *ops = dev->netdev_ops;
8226 struct bpf_map *chain_map = NULL;
8227 enum bpf_netdev_command query;
8228 struct bpf_prog *prog = NULL;
8229 bpf_op_t bpf_op, bpf_chk;
8230 bool offload;
8231 int err;
8232
8233 ASSERT_RTNL();
8234
8235 offload = flags & XDP_FLAGS_HW_MODE;
8236 query = offload ? XDP_QUERY_PROG_HW : XDP_QUERY_PROG;
8237
8238 bpf_op = bpf_chk = ops->ndo_bpf;
8239 if (!bpf_op && (flags & (XDP_FLAGS_DRV_MODE | XDP_FLAGS_HW_MODE))) {
8240 NL_SET_ERR_MSG(extack, "underlying driver does not support XDP in native mode");
8241 return -EOPNOTSUPP;
8242 }
8243 if (!bpf_op || (flags & XDP_FLAGS_SKB_MODE))
8244 bpf_op = generic_xdp_install;
8245 if (bpf_op == bpf_chk)
8246 bpf_chk = generic_xdp_install;
8247
8248 if (prog_fd >= 0) {
8249 u32 prog_id;
8250
8251 if (!offload && __dev_xdp_query(dev, bpf_chk, XDP_QUERY_PROG)) {
8252 NL_SET_ERR_MSG(extack, "native and generic XDP can't be active at the same time");
8253 return -EEXIST;
8254 }
8255
8256 prog_id = __dev_xdp_query(dev, bpf_op, query);
8257 if ((flags & XDP_FLAGS_UPDATE_IF_NOEXIST) && prog_id) {
8258 NL_SET_ERR_MSG(extack, "XDP program already attached");
8259 return -EBUSY;
8260 }
8261
8262 prog = bpf_prog_get_type_dev(prog_fd, BPF_PROG_TYPE_XDP,
8263 bpf_op == ops->ndo_bpf);
8264 if (IS_ERR(prog))
8265 return PTR_ERR(prog);
8266
8267 if (!offload && bpf_prog_is_dev_bound(prog->aux)) {
8268 NL_SET_ERR_MSG(extack, "using device-bound program without HW_MODE flag is not supported");
8269 bpf_prog_put(prog);
8270 return -EINVAL;
8271 }
8272
8273 if (prog->aux->id == prog_id) {
8274 bpf_prog_put(prog);
8275 return 0;
8276 }
8277 } else {
8278 if (chain_map_fd >= 0)
8279 return -EINVAL;
8280
8281 if (!__dev_xdp_query(dev, bpf_op, query))
8282 return 0;
8283 }
8284
8285 if (chain_map_fd >= 0) {
> 8286 chain_map = bpf_map_get_with_uref(chain_map_fd);
8287 if (IS_ERR(chain_map))
8288 return PTR_ERR(chain_map);
8289
8290 if (chain_map->map_type != BPF_MAP_TYPE_XDP_CHAIN) {
8291 NL_SET_ERR_MSG(extack, "invalid chain map type");
8292 bpf_map_put_with_uref(chain_map);
8293 return -EINVAL;
8294 }
8295 }
8296
8297 err = dev_xdp_install(dev, bpf_op, extack, flags, prog);
8298 if (err < 0) {
8299 if (prog)
8300 bpf_prog_put(prog);
8301 } else {
8302 rcu_swap_protected(dev->xdp_chain_map, chain_map, 1);
8303 }
8304
8305 if(chain_map)
8306 bpf_map_put_with_uref(chain_map);
8307
8308 return err;
8309 }
8310
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 37305 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: kbuild test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH bpf-next 3/9] xdp: Support setting and getting device chain map
Date: Thu, 03 Oct 2019 02:29:04 +0800 [thread overview]
Message-ID: <201910030231.CSqo46St%lkp@intel.com> (raw)
In-Reply-To: <157002302784.1302756.2073486805381846919.stgit@alrua-x1>
[-- Attachment #1: Type: text/plain, Size: 6164 bytes --]
Hi "Toke,
I love your patch! Yet something to improve:
[auto build test ERROR on bpf-next/master]
url: https://github.com/0day-ci/linux/commits/Toke-H-iland-J-rgensen/xdp-Support-multiple-programs-on-a-single-interface-through-chain-calls/20191003-005238
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
config: x86_64-randconfig-s2-201939 (attached as .config)
compiler: gcc-5 (Ubuntu 5.5.0-12ubuntu1) 5.5.0 20171010
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
net/core/dev.c: In function 'dev_xdp_uninstall':
net/core/dev.c:8187:3: error: implicit declaration of function 'bpf_map_put_with_uref' [-Werror=implicit-function-declaration]
bpf_map_put_with_uref(chain_map);
^
net/core/dev.c: In function 'dev_change_xdp_fd':
>> net/core/dev.c:8286:15: error: implicit declaration of function 'bpf_map_get_with_uref' [-Werror=implicit-function-declaration]
chain_map = bpf_map_get_with_uref(chain_map_fd);
^
net/core/dev.c:8286:13: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
chain_map = bpf_map_get_with_uref(chain_map_fd);
^
cc1: some warnings being treated as errors
vim +/bpf_map_get_with_uref +8286 net/core/dev.c
8177
8178 static void dev_xdp_uninstall(struct net_device *dev)
8179 {
8180 struct bpf_map *chain_map = NULL;
8181 struct netdev_bpf xdp;
8182 bpf_op_t ndo_bpf;
8183
8184 /* Remove chain map */
8185 rcu_swap_protected(dev->xdp_chain_map, chain_map, 1);
8186 if(chain_map)
> 8187 bpf_map_put_with_uref(chain_map);
8188
8189 /* Remove generic XDP */
8190 WARN_ON(dev_xdp_install(dev, generic_xdp_install, NULL, 0, NULL));
8191
8192 /* Remove from the driver */
8193 ndo_bpf = dev->netdev_ops->ndo_bpf;
8194 if (!ndo_bpf)
8195 return;
8196
8197 memset(&xdp, 0, sizeof(xdp));
8198 xdp.command = XDP_QUERY_PROG;
8199 WARN_ON(ndo_bpf(dev, &xdp));
8200 if (xdp.prog_id)
8201 WARN_ON(dev_xdp_install(dev, ndo_bpf, NULL, xdp.prog_flags,
8202 NULL));
8203
8204 /* Remove HW offload */
8205 memset(&xdp, 0, sizeof(xdp));
8206 xdp.command = XDP_QUERY_PROG_HW;
8207 if (!ndo_bpf(dev, &xdp) && xdp.prog_id)
8208 WARN_ON(dev_xdp_install(dev, ndo_bpf, NULL, xdp.prog_flags,
8209 NULL));
8210 }
8211
8212 /**
8213 * dev_change_xdp_fd - set or clear a bpf program for a device rx path
8214 * @dev: device
8215 * @extack: netlink extended ack
8216 * @prog_fd: new program fd or negative value to clear
8217 * @chain_map_fd: new chain map fd or negative value to clear
8218 * @flags: xdp-related flags
8219 *
8220 * Set or clear a bpf program for a device
8221 */
8222 int dev_change_xdp_fd(struct net_device *dev, struct netlink_ext_ack *extack,
8223 int prog_fd, int chain_map_fd, u32 flags)
8224 {
8225 const struct net_device_ops *ops = dev->netdev_ops;
8226 struct bpf_map *chain_map = NULL;
8227 enum bpf_netdev_command query;
8228 struct bpf_prog *prog = NULL;
8229 bpf_op_t bpf_op, bpf_chk;
8230 bool offload;
8231 int err;
8232
8233 ASSERT_RTNL();
8234
8235 offload = flags & XDP_FLAGS_HW_MODE;
8236 query = offload ? XDP_QUERY_PROG_HW : XDP_QUERY_PROG;
8237
8238 bpf_op = bpf_chk = ops->ndo_bpf;
8239 if (!bpf_op && (flags & (XDP_FLAGS_DRV_MODE | XDP_FLAGS_HW_MODE))) {
8240 NL_SET_ERR_MSG(extack, "underlying driver does not support XDP in native mode");
8241 return -EOPNOTSUPP;
8242 }
8243 if (!bpf_op || (flags & XDP_FLAGS_SKB_MODE))
8244 bpf_op = generic_xdp_install;
8245 if (bpf_op == bpf_chk)
8246 bpf_chk = generic_xdp_install;
8247
8248 if (prog_fd >= 0) {
8249 u32 prog_id;
8250
8251 if (!offload && __dev_xdp_query(dev, bpf_chk, XDP_QUERY_PROG)) {
8252 NL_SET_ERR_MSG(extack, "native and generic XDP can't be active at the same time");
8253 return -EEXIST;
8254 }
8255
8256 prog_id = __dev_xdp_query(dev, bpf_op, query);
8257 if ((flags & XDP_FLAGS_UPDATE_IF_NOEXIST) && prog_id) {
8258 NL_SET_ERR_MSG(extack, "XDP program already attached");
8259 return -EBUSY;
8260 }
8261
8262 prog = bpf_prog_get_type_dev(prog_fd, BPF_PROG_TYPE_XDP,
8263 bpf_op == ops->ndo_bpf);
8264 if (IS_ERR(prog))
8265 return PTR_ERR(prog);
8266
8267 if (!offload && bpf_prog_is_dev_bound(prog->aux)) {
8268 NL_SET_ERR_MSG(extack, "using device-bound program without HW_MODE flag is not supported");
8269 bpf_prog_put(prog);
8270 return -EINVAL;
8271 }
8272
8273 if (prog->aux->id == prog_id) {
8274 bpf_prog_put(prog);
8275 return 0;
8276 }
8277 } else {
8278 if (chain_map_fd >= 0)
8279 return -EINVAL;
8280
8281 if (!__dev_xdp_query(dev, bpf_op, query))
8282 return 0;
8283 }
8284
8285 if (chain_map_fd >= 0) {
> 8286 chain_map = bpf_map_get_with_uref(chain_map_fd);
8287 if (IS_ERR(chain_map))
8288 return PTR_ERR(chain_map);
8289
8290 if (chain_map->map_type != BPF_MAP_TYPE_XDP_CHAIN) {
8291 NL_SET_ERR_MSG(extack, "invalid chain map type");
8292 bpf_map_put_with_uref(chain_map);
8293 return -EINVAL;
8294 }
8295 }
8296
8297 err = dev_xdp_install(dev, bpf_op, extack, flags, prog);
8298 if (err < 0) {
8299 if (prog)
8300 bpf_prog_put(prog);
8301 } else {
8302 rcu_swap_protected(dev->xdp_chain_map, chain_map, 1);
8303 }
8304
8305 if(chain_map)
8306 bpf_map_put_with_uref(chain_map);
8307
8308 return err;
8309 }
8310
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 37305 bytes --]
next prev parent reply other threads:[~2019-10-02 18:29 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-02 13:30 [PATCH bpf-next 0/9] xdp: Support multiple programs on a single interface through chain calls Toke Høiland-Jørgensen
2019-10-02 13:30 ` [PATCH bpf-next 1/9] hashtab: Add new bpf_map_fd_put_value op Toke Høiland-Jørgensen
2019-10-02 13:30 ` [PATCH bpf-next 2/9] xdp: Add new xdp_chain_map type for specifying XDP call sequences Toke Høiland-Jørgensen
2019-10-02 15:50 ` Lorenz Bauer
2019-10-02 18:25 ` Toke Høiland-Jørgensen
2019-10-02 13:30 ` [PATCH bpf-next 3/9] xdp: Support setting and getting device chain map Toke Høiland-Jørgensen
2019-10-02 15:50 ` Lorenz Bauer
2019-10-02 18:32 ` Toke Høiland-Jørgensen
2019-10-02 18:07 ` kbuild test robot
2019-10-02 18:07 ` kbuild test robot
2019-10-02 18:29 ` kbuild test robot [this message]
2019-10-02 18:29 ` kbuild test robot
2019-10-02 13:30 ` [PATCH bpf-next 4/9] xdp: Implement chain call logic to support multiple programs on one interface Toke Høiland-Jørgensen
2019-10-02 17:33 ` kbuild test robot
2019-10-02 17:33 ` kbuild test robot
2019-10-02 17:53 ` kbuild test robot
2019-10-02 17:53 ` kbuild test robot
2019-10-02 13:30 ` [PATCH bpf-next 5/9] tools/include/uapi: Add XDP chain map definitions Toke Høiland-Jørgensen
2019-10-02 13:30 ` [PATCH bpf-next 6/9] tools/libbpf_probes: Add support for xdp_chain map type Toke Høiland-Jørgensen
2019-10-02 13:30 ` [PATCH bpf-next 7/9] bpftool: Add definitions " Toke Høiland-Jørgensen
2019-10-02 13:30 ` [PATCH bpf-next 8/9] libbpf: Add support for setting and getting XDP chain maps Toke Høiland-Jørgensen
2019-10-02 13:30 ` [PATCH bpf-next 9/9] selftests: Add tests for XDP chain calls Toke Høiland-Jørgensen
2019-10-02 15:10 ` [PATCH bpf-next 0/9] xdp: Support multiple programs on a single interface through " Alan Maguire
2019-10-02 15:33 ` Toke Høiland-Jørgensen
2019-10-02 16:34 ` John Fastabend
2019-10-02 18:33 ` Toke Høiland-Jørgensen
2019-10-02 20:34 ` John Fastabend
2019-10-03 7:48 ` Toke Høiland-Jørgensen
2019-10-03 10:09 ` Jesper Dangaard Brouer
2019-10-03 19:45 ` John Fastabend
2019-10-02 16:35 ` Lorenz Bauer
2019-10-02 18:54 ` Toke Høiland-Jørgensen
2019-10-02 16:43 ` John Fastabend
2019-10-02 19:09 ` Toke Høiland-Jørgensen
2019-10-02 19:15 ` Daniel Borkmann
2019-10-02 19:29 ` Toke Høiland-Jørgensen
2019-10-02 19:46 ` Alexei Starovoitov
2019-10-03 7:58 ` Toke Høiland-Jørgensen
2019-10-02 18:38 ` Song Liu
2019-10-02 18:54 ` Song Liu
2019-10-02 19:25 ` Toke Høiland-Jørgensen
2019-10-03 8:53 ` Jesper Dangaard Brouer
2019-10-03 14:03 ` Alexei Starovoitov
2019-10-03 14:33 ` Toke Høiland-Jørgensen
2019-10-03 14:53 ` Edward Cree
2019-10-03 18:49 ` Jesper Dangaard Brouer
2019-10-03 19:35 ` John Fastabend
2019-10-04 8:09 ` Toke Høiland-Jørgensen
2019-10-04 10:34 ` Edward Cree
2019-10-04 15:58 ` Lorenz Bauer
2019-10-07 16:43 ` Edward Cree
2019-10-07 17:12 ` Lorenz Bauer
2019-10-07 19:21 ` Edward Cree
2019-10-07 21:01 ` Alexei Starovoitov
2019-10-02 19:23 ` Toke Høiland-Jørgensen
2019-10-02 19:49 ` Song Liu
2019-10-03 7:59 ` Toke Høiland-Jørgensen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201910030231.CSqo46St%lkp@intel.com \
--to=lkp@intel.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=brouer@redhat.com \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=kafai@fb.com \
--cc=kbuild-all@01.org \
--cc=lmb@cloudflare.com \
--cc=marek@cloudflare.com \
--cc=netdev@vger.kernel.org \
--cc=songliubraving@fb.com \
--cc=toke@redhat.com \
--cc=yhs@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.