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 <l...@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: .config.gz
Description: application/gzip

Reply via email to