All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: YueHaibing <yuehaibing@huawei.com>,
	leon@kernel.org, dledford@redhat.com, jgg@ziepe.ca,
	yishaih@nvidia.com
Cc: kbuild-all@lists.01.org, linux-rdma@vger.kernel.org,
	linux-kernel@vger.kernel.org, YueHaibing <yuehaibing@huawei.com>
Subject: Re: [PATCH -next] IB/mlx5: Add missing error code
Date: Mon, 22 Feb 2021 20:12:10 +0800	[thread overview]
Message-ID: <202102222006.Y9H5ylzk-lkp@intel.com> (raw)
In-Reply-To: <20210222082503.22388-1-yuehaibing@huawei.com>

[-- Attachment #1: Type: text/plain, Size: 15402 bytes --]

Hi YueHaibing,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on next-20210219]

url:    https://github.com/0day-ci/linux/commits/YueHaibing/IB-mlx5-Add-missing-error-code/20210222-162815
base:    abaf6f60176f1ae9d946d63e4db63164600b7b1a
config: arc-allyesconfig (attached as .config)
compiler: arceb-elf-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/893d2d872d109265f4b7419499d5de46c47895a7
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review YueHaibing/IB-mlx5-Add-missing-error-code/20210222-162815
        git checkout 893d2d872d109265f4b7419499d5de46c47895a7
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/infiniband/hw/mlx5/devx.c: In function 'mlx5_ib_handler_MLX5_IB_METHOD_DEVX_SUBSCRIBE_EVENT':
>> drivers/infiniband/hw/mlx5/devx.c:2078:4: error: expected ';' before 'goto'
    2078 |    goto err;
         |    ^~~~


vim +2078 drivers/infiniband/hw/mlx5/devx.c

7597385371425f Yishai Hadas    2019-06-30  1971  
7597385371425f Yishai Hadas    2019-06-30  1972  #define MAX_NUM_EVENTS 16
7597385371425f Yishai Hadas    2019-06-30  1973  static int UVERBS_HANDLER(MLX5_IB_METHOD_DEVX_SUBSCRIBE_EVENT)(
7597385371425f Yishai Hadas    2019-06-30  1974  	struct uverbs_attr_bundle *attrs)
7597385371425f Yishai Hadas    2019-06-30  1975  {
7597385371425f Yishai Hadas    2019-06-30  1976  	struct ib_uobject *devx_uobj = uverbs_attr_get_uobject(
7597385371425f Yishai Hadas    2019-06-30  1977  				attrs,
7597385371425f Yishai Hadas    2019-06-30  1978  				MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_OBJ_HANDLE);
7597385371425f Yishai Hadas    2019-06-30  1979  	struct mlx5_ib_ucontext *c = rdma_udata_to_drv_context(
7597385371425f Yishai Hadas    2019-06-30  1980  		&attrs->driver_udata, struct mlx5_ib_ucontext, ibucontext);
7597385371425f Yishai Hadas    2019-06-30  1981  	struct mlx5_ib_dev *dev = to_mdev(c->ibucontext.device);
7597385371425f Yishai Hadas    2019-06-30  1982  	struct ib_uobject *fd_uobj;
7597385371425f Yishai Hadas    2019-06-30  1983  	struct devx_obj *obj = NULL;
7597385371425f Yishai Hadas    2019-06-30  1984  	struct devx_async_event_file *ev_file;
7597385371425f Yishai Hadas    2019-06-30  1985  	struct mlx5_devx_event_table *devx_event_table = &dev->devx_event_table;
7597385371425f Yishai Hadas    2019-06-30  1986  	u16 *event_type_num_list;
7597385371425f Yishai Hadas    2019-06-30  1987  	struct devx_event_subscription *event_sub, *tmp_sub;
7597385371425f Yishai Hadas    2019-06-30  1988  	struct list_head sub_list;
7597385371425f Yishai Hadas    2019-06-30  1989  	int redirect_fd;
7597385371425f Yishai Hadas    2019-06-30  1990  	bool use_eventfd = false;
7597385371425f Yishai Hadas    2019-06-30  1991  	int num_events;
7597385371425f Yishai Hadas    2019-06-30  1992  	int num_alloc_xa_entries = 0;
7597385371425f Yishai Hadas    2019-06-30  1993  	u16 obj_type = 0;
7597385371425f Yishai Hadas    2019-06-30  1994  	u64 cookie = 0;
7597385371425f Yishai Hadas    2019-06-30  1995  	u32 obj_id = 0;
7597385371425f Yishai Hadas    2019-06-30  1996  	int err;
7597385371425f Yishai Hadas    2019-06-30  1997  	int i;
7597385371425f Yishai Hadas    2019-06-30  1998  
7597385371425f Yishai Hadas    2019-06-30  1999  	if (!c->devx_uid)
7597385371425f Yishai Hadas    2019-06-30  2000  		return -EINVAL;
7597385371425f Yishai Hadas    2019-06-30  2001  
7597385371425f Yishai Hadas    2019-06-30  2002  	if (!IS_ERR(devx_uobj)) {
7597385371425f Yishai Hadas    2019-06-30  2003  		obj = (struct devx_obj *)devx_uobj->object;
7597385371425f Yishai Hadas    2019-06-30  2004  		if (obj)
7597385371425f Yishai Hadas    2019-06-30  2005  			obj_id = get_dec_obj_id(obj->obj_id);
7597385371425f Yishai Hadas    2019-06-30  2006  	}
7597385371425f Yishai Hadas    2019-06-30  2007  
7597385371425f Yishai Hadas    2019-06-30  2008  	fd_uobj = uverbs_attr_get_uobject(attrs,
7597385371425f Yishai Hadas    2019-06-30  2009  				MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_FD_HANDLE);
7597385371425f Yishai Hadas    2019-06-30  2010  	if (IS_ERR(fd_uobj))
7597385371425f Yishai Hadas    2019-06-30  2011  		return PTR_ERR(fd_uobj);
7597385371425f Yishai Hadas    2019-06-30  2012  
7597385371425f Yishai Hadas    2019-06-30  2013  	ev_file = container_of(fd_uobj, struct devx_async_event_file,
7597385371425f Yishai Hadas    2019-06-30  2014  			       uobj);
7597385371425f Yishai Hadas    2019-06-30  2015  
7597385371425f Yishai Hadas    2019-06-30  2016  	if (uverbs_attr_is_valid(attrs,
7597385371425f Yishai Hadas    2019-06-30  2017  				 MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_FD_NUM)) {
7597385371425f Yishai Hadas    2019-06-30  2018  		err = uverbs_copy_from(&redirect_fd, attrs,
7597385371425f Yishai Hadas    2019-06-30  2019  			       MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_FD_NUM);
7597385371425f Yishai Hadas    2019-06-30  2020  		if (err)
7597385371425f Yishai Hadas    2019-06-30  2021  			return err;
7597385371425f Yishai Hadas    2019-06-30  2022  
7597385371425f Yishai Hadas    2019-06-30  2023  		use_eventfd = true;
7597385371425f Yishai Hadas    2019-06-30  2024  	}
7597385371425f Yishai Hadas    2019-06-30  2025  
7597385371425f Yishai Hadas    2019-06-30  2026  	if (uverbs_attr_is_valid(attrs,
7597385371425f Yishai Hadas    2019-06-30  2027  				 MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_COOKIE)) {
7597385371425f Yishai Hadas    2019-06-30  2028  		if (use_eventfd)
7597385371425f Yishai Hadas    2019-06-30  2029  			return -EINVAL;
7597385371425f Yishai Hadas    2019-06-30  2030  
7597385371425f Yishai Hadas    2019-06-30  2031  		err = uverbs_copy_from(&cookie, attrs,
7597385371425f Yishai Hadas    2019-06-30  2032  				MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_COOKIE);
7597385371425f Yishai Hadas    2019-06-30  2033  		if (err)
7597385371425f Yishai Hadas    2019-06-30  2034  			return err;
7597385371425f Yishai Hadas    2019-06-30  2035  	}
7597385371425f Yishai Hadas    2019-06-30  2036  
7597385371425f Yishai Hadas    2019-06-30  2037  	num_events = uverbs_attr_ptr_get_array_size(
7597385371425f Yishai Hadas    2019-06-30  2038  		attrs, MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_TYPE_NUM_LIST,
7597385371425f Yishai Hadas    2019-06-30  2039  		sizeof(u16));
7597385371425f Yishai Hadas    2019-06-30  2040  
7597385371425f Yishai Hadas    2019-06-30  2041  	if (num_events < 0)
7597385371425f Yishai Hadas    2019-06-30  2042  		return num_events;
7597385371425f Yishai Hadas    2019-06-30  2043  
7597385371425f Yishai Hadas    2019-06-30  2044  	if (num_events > MAX_NUM_EVENTS)
7597385371425f Yishai Hadas    2019-06-30  2045  		return -EINVAL;
7597385371425f Yishai Hadas    2019-06-30  2046  
7597385371425f Yishai Hadas    2019-06-30  2047  	event_type_num_list = uverbs_attr_get_alloced_ptr(attrs,
7597385371425f Yishai Hadas    2019-06-30  2048  			MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_TYPE_NUM_LIST);
7597385371425f Yishai Hadas    2019-06-30  2049  
7597385371425f Yishai Hadas    2019-06-30  2050  	if (!is_valid_events(dev->mdev, num_events, event_type_num_list, obj))
7597385371425f Yishai Hadas    2019-06-30  2051  		return -EINVAL;
7597385371425f Yishai Hadas    2019-06-30  2052  
7597385371425f Yishai Hadas    2019-06-30  2053  	INIT_LIST_HEAD(&sub_list);
7597385371425f Yishai Hadas    2019-06-30  2054  
7597385371425f Yishai Hadas    2019-06-30  2055  	/* Protect from concurrent subscriptions to same XA entries to allow
7597385371425f Yishai Hadas    2019-06-30  2056  	 * both to succeed
7597385371425f Yishai Hadas    2019-06-30  2057  	 */
7597385371425f Yishai Hadas    2019-06-30  2058  	mutex_lock(&devx_event_table->event_xa_lock);
7597385371425f Yishai Hadas    2019-06-30  2059  	for (i = 0; i < num_events; i++) {
7597385371425f Yishai Hadas    2019-06-30  2060  		u32 key_level1;
7597385371425f Yishai Hadas    2019-06-30  2061  
7597385371425f Yishai Hadas    2019-06-30  2062  		if (obj)
7597385371425f Yishai Hadas    2019-06-30  2063  			obj_type = get_dec_obj_type(obj,
7597385371425f Yishai Hadas    2019-06-30  2064  						    event_type_num_list[i]);
7597385371425f Yishai Hadas    2019-06-30  2065  		key_level1 = event_type_num_list[i] | obj_type << 16;
7597385371425f Yishai Hadas    2019-06-30  2066  
7597385371425f Yishai Hadas    2019-06-30  2067  		err = subscribe_event_xa_alloc(devx_event_table,
7597385371425f Yishai Hadas    2019-06-30  2068  					       key_level1,
7597385371425f Yishai Hadas    2019-06-30  2069  					       obj,
7597385371425f Yishai Hadas    2019-06-30  2070  					       obj_id);
7597385371425f Yishai Hadas    2019-06-30  2071  		if (err)
7597385371425f Yishai Hadas    2019-06-30  2072  			goto err;
7597385371425f Yishai Hadas    2019-06-30  2073  
7597385371425f Yishai Hadas    2019-06-30  2074  		num_alloc_xa_entries++;
7597385371425f Yishai Hadas    2019-06-30  2075  		event_sub = kzalloc(sizeof(*event_sub), GFP_KERNEL);
893d2d872d1092 YueHaibing      2021-02-22  2076  		if (!event_sub) {
893d2d872d1092 YueHaibing      2021-02-22  2077  			err = -ENOMEM
7597385371425f Yishai Hadas    2019-06-30 @2078  			goto err;
893d2d872d1092 YueHaibing      2021-02-22  2079  		}
7597385371425f Yishai Hadas    2019-06-30  2080  
7597385371425f Yishai Hadas    2019-06-30  2081  		list_add_tail(&event_sub->event_list, &sub_list);
6898d1c661d79f Jason Gunthorpe 2020-01-08  2082  		uverbs_uobject_get(&ev_file->uobj);
7597385371425f Yishai Hadas    2019-06-30  2083  		if (use_eventfd) {
7597385371425f Yishai Hadas    2019-06-30  2084  			event_sub->eventfd =
7597385371425f Yishai Hadas    2019-06-30  2085  				eventfd_ctx_fdget(redirect_fd);
7597385371425f Yishai Hadas    2019-06-30  2086  
e7e6c6320c8c9e Dan Carpenter   2019-08-07  2087  			if (IS_ERR(event_sub->eventfd)) {
7597385371425f Yishai Hadas    2019-06-30  2088  				err = PTR_ERR(event_sub->eventfd);
7597385371425f Yishai Hadas    2019-06-30  2089  				event_sub->eventfd = NULL;
7597385371425f Yishai Hadas    2019-06-30  2090  				goto err;
7597385371425f Yishai Hadas    2019-06-30  2091  			}
7597385371425f Yishai Hadas    2019-06-30  2092  		}
7597385371425f Yishai Hadas    2019-06-30  2093  
7597385371425f Yishai Hadas    2019-06-30  2094  		event_sub->cookie = cookie;
7597385371425f Yishai Hadas    2019-06-30  2095  		event_sub->ev_file = ev_file;
7597385371425f Yishai Hadas    2019-06-30  2096  		/* May be needed upon cleanup the devx object/subscription */
7597385371425f Yishai Hadas    2019-06-30  2097  		event_sub->xa_key_level1 = key_level1;
7597385371425f Yishai Hadas    2019-06-30  2098  		event_sub->xa_key_level2 = obj_id;
7597385371425f Yishai Hadas    2019-06-30  2099  		INIT_LIST_HEAD(&event_sub->obj_list);
7597385371425f Yishai Hadas    2019-06-30  2100  	}
7597385371425f Yishai Hadas    2019-06-30  2101  
7597385371425f Yishai Hadas    2019-06-30  2102  	/* Once all the allocations and the XA data insertions were done we
7597385371425f Yishai Hadas    2019-06-30  2103  	 * can go ahead and add all the subscriptions to the relevant lists
7597385371425f Yishai Hadas    2019-06-30  2104  	 * without concern of a failure.
7597385371425f Yishai Hadas    2019-06-30  2105  	 */
7597385371425f Yishai Hadas    2019-06-30  2106  	list_for_each_entry_safe(event_sub, tmp_sub, &sub_list, event_list) {
7597385371425f Yishai Hadas    2019-06-30  2107  		struct devx_event *event;
7597385371425f Yishai Hadas    2019-06-30  2108  		struct devx_obj_event *obj_event;
7597385371425f Yishai Hadas    2019-06-30  2109  
7597385371425f Yishai Hadas    2019-06-30  2110  		list_del_init(&event_sub->event_list);
7597385371425f Yishai Hadas    2019-06-30  2111  
7597385371425f Yishai Hadas    2019-06-30  2112  		spin_lock_irq(&ev_file->lock);
7597385371425f Yishai Hadas    2019-06-30  2113  		list_add_tail_rcu(&event_sub->file_list,
7597385371425f Yishai Hadas    2019-06-30  2114  				  &ev_file->subscribed_events_list);
7597385371425f Yishai Hadas    2019-06-30  2115  		spin_unlock_irq(&ev_file->lock);
7597385371425f Yishai Hadas    2019-06-30  2116  
7597385371425f Yishai Hadas    2019-06-30  2117  		event = xa_load(&devx_event_table->event_xa,
7597385371425f Yishai Hadas    2019-06-30  2118  				event_sub->xa_key_level1);
7597385371425f Yishai Hadas    2019-06-30  2119  		WARN_ON(!event);
7597385371425f Yishai Hadas    2019-06-30  2120  
7597385371425f Yishai Hadas    2019-06-30  2121  		if (!obj) {
7597385371425f Yishai Hadas    2019-06-30  2122  			list_add_tail_rcu(&event_sub->xa_list,
7597385371425f Yishai Hadas    2019-06-30  2123  					  &event->unaffiliated_list);
7597385371425f Yishai Hadas    2019-06-30  2124  			continue;
7597385371425f Yishai Hadas    2019-06-30  2125  		}
7597385371425f Yishai Hadas    2019-06-30  2126  
7597385371425f Yishai Hadas    2019-06-30  2127  		obj_event = xa_load(&event->object_ids, obj_id);
7597385371425f Yishai Hadas    2019-06-30  2128  		WARN_ON(!obj_event);
7597385371425f Yishai Hadas    2019-06-30  2129  		list_add_tail_rcu(&event_sub->xa_list,
7597385371425f Yishai Hadas    2019-06-30  2130  				  &obj_event->obj_sub_list);
7597385371425f Yishai Hadas    2019-06-30  2131  		list_add_tail_rcu(&event_sub->obj_list,
7597385371425f Yishai Hadas    2019-06-30  2132  				  &obj->event_sub);
7597385371425f Yishai Hadas    2019-06-30  2133  	}
7597385371425f Yishai Hadas    2019-06-30  2134  
7597385371425f Yishai Hadas    2019-06-30  2135  	mutex_unlock(&devx_event_table->event_xa_lock);
7597385371425f Yishai Hadas    2019-06-30  2136  	return 0;
7597385371425f Yishai Hadas    2019-06-30  2137  
7597385371425f Yishai Hadas    2019-06-30  2138  err:
7597385371425f Yishai Hadas    2019-06-30  2139  	list_for_each_entry_safe(event_sub, tmp_sub, &sub_list, event_list) {
7597385371425f Yishai Hadas    2019-06-30  2140  		list_del(&event_sub->event_list);
7597385371425f Yishai Hadas    2019-06-30  2141  
7597385371425f Yishai Hadas    2019-06-30  2142  		subscribe_event_xa_dealloc(devx_event_table,
7597385371425f Yishai Hadas    2019-06-30  2143  					   event_sub->xa_key_level1,
7597385371425f Yishai Hadas    2019-06-30  2144  					   obj,
7597385371425f Yishai Hadas    2019-06-30  2145  					   obj_id);
7597385371425f Yishai Hadas    2019-06-30  2146  
7597385371425f Yishai Hadas    2019-06-30  2147  		if (event_sub->eventfd)
7597385371425f Yishai Hadas    2019-06-30  2148  			eventfd_ctx_put(event_sub->eventfd);
6898d1c661d79f Jason Gunthorpe 2020-01-08  2149  		uverbs_uobject_put(&event_sub->ev_file->uobj);
7597385371425f Yishai Hadas    2019-06-30  2150  		kfree(event_sub);
7597385371425f Yishai Hadas    2019-06-30  2151  	}
7597385371425f Yishai Hadas    2019-06-30  2152  
7597385371425f Yishai Hadas    2019-06-30  2153  	mutex_unlock(&devx_event_table->event_xa_lock);
7597385371425f Yishai Hadas    2019-06-30  2154  	return err;
7597385371425f Yishai Hadas    2019-06-30  2155  }
7597385371425f Yishai Hadas    2019-06-30  2156  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 67522 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH -next] IB/mlx5: Add missing error code
Date: Mon, 22 Feb 2021 20:12:10 +0800	[thread overview]
Message-ID: <202102222006.Y9H5ylzk-lkp@intel.com> (raw)
In-Reply-To: <20210222082503.22388-1-yuehaibing@huawei.com>

[-- Attachment #1: Type: text/plain, Size: 15627 bytes --]

Hi YueHaibing,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on next-20210219]

url:    https://github.com/0day-ci/linux/commits/YueHaibing/IB-mlx5-Add-missing-error-code/20210222-162815
base:    abaf6f60176f1ae9d946d63e4db63164600b7b1a
config: arc-allyesconfig (attached as .config)
compiler: arceb-elf-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/893d2d872d109265f4b7419499d5de46c47895a7
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review YueHaibing/IB-mlx5-Add-missing-error-code/20210222-162815
        git checkout 893d2d872d109265f4b7419499d5de46c47895a7
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/infiniband/hw/mlx5/devx.c: In function 'mlx5_ib_handler_MLX5_IB_METHOD_DEVX_SUBSCRIBE_EVENT':
>> drivers/infiniband/hw/mlx5/devx.c:2078:4: error: expected ';' before 'goto'
    2078 |    goto err;
         |    ^~~~


vim +2078 drivers/infiniband/hw/mlx5/devx.c

7597385371425f Yishai Hadas    2019-06-30  1971  
7597385371425f Yishai Hadas    2019-06-30  1972  #define MAX_NUM_EVENTS 16
7597385371425f Yishai Hadas    2019-06-30  1973  static int UVERBS_HANDLER(MLX5_IB_METHOD_DEVX_SUBSCRIBE_EVENT)(
7597385371425f Yishai Hadas    2019-06-30  1974  	struct uverbs_attr_bundle *attrs)
7597385371425f Yishai Hadas    2019-06-30  1975  {
7597385371425f Yishai Hadas    2019-06-30  1976  	struct ib_uobject *devx_uobj = uverbs_attr_get_uobject(
7597385371425f Yishai Hadas    2019-06-30  1977  				attrs,
7597385371425f Yishai Hadas    2019-06-30  1978  				MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_OBJ_HANDLE);
7597385371425f Yishai Hadas    2019-06-30  1979  	struct mlx5_ib_ucontext *c = rdma_udata_to_drv_context(
7597385371425f Yishai Hadas    2019-06-30  1980  		&attrs->driver_udata, struct mlx5_ib_ucontext, ibucontext);
7597385371425f Yishai Hadas    2019-06-30  1981  	struct mlx5_ib_dev *dev = to_mdev(c->ibucontext.device);
7597385371425f Yishai Hadas    2019-06-30  1982  	struct ib_uobject *fd_uobj;
7597385371425f Yishai Hadas    2019-06-30  1983  	struct devx_obj *obj = NULL;
7597385371425f Yishai Hadas    2019-06-30  1984  	struct devx_async_event_file *ev_file;
7597385371425f Yishai Hadas    2019-06-30  1985  	struct mlx5_devx_event_table *devx_event_table = &dev->devx_event_table;
7597385371425f Yishai Hadas    2019-06-30  1986  	u16 *event_type_num_list;
7597385371425f Yishai Hadas    2019-06-30  1987  	struct devx_event_subscription *event_sub, *tmp_sub;
7597385371425f Yishai Hadas    2019-06-30  1988  	struct list_head sub_list;
7597385371425f Yishai Hadas    2019-06-30  1989  	int redirect_fd;
7597385371425f Yishai Hadas    2019-06-30  1990  	bool use_eventfd = false;
7597385371425f Yishai Hadas    2019-06-30  1991  	int num_events;
7597385371425f Yishai Hadas    2019-06-30  1992  	int num_alloc_xa_entries = 0;
7597385371425f Yishai Hadas    2019-06-30  1993  	u16 obj_type = 0;
7597385371425f Yishai Hadas    2019-06-30  1994  	u64 cookie = 0;
7597385371425f Yishai Hadas    2019-06-30  1995  	u32 obj_id = 0;
7597385371425f Yishai Hadas    2019-06-30  1996  	int err;
7597385371425f Yishai Hadas    2019-06-30  1997  	int i;
7597385371425f Yishai Hadas    2019-06-30  1998  
7597385371425f Yishai Hadas    2019-06-30  1999  	if (!c->devx_uid)
7597385371425f Yishai Hadas    2019-06-30  2000  		return -EINVAL;
7597385371425f Yishai Hadas    2019-06-30  2001  
7597385371425f Yishai Hadas    2019-06-30  2002  	if (!IS_ERR(devx_uobj)) {
7597385371425f Yishai Hadas    2019-06-30  2003  		obj = (struct devx_obj *)devx_uobj->object;
7597385371425f Yishai Hadas    2019-06-30  2004  		if (obj)
7597385371425f Yishai Hadas    2019-06-30  2005  			obj_id = get_dec_obj_id(obj->obj_id);
7597385371425f Yishai Hadas    2019-06-30  2006  	}
7597385371425f Yishai Hadas    2019-06-30  2007  
7597385371425f Yishai Hadas    2019-06-30  2008  	fd_uobj = uverbs_attr_get_uobject(attrs,
7597385371425f Yishai Hadas    2019-06-30  2009  				MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_FD_HANDLE);
7597385371425f Yishai Hadas    2019-06-30  2010  	if (IS_ERR(fd_uobj))
7597385371425f Yishai Hadas    2019-06-30  2011  		return PTR_ERR(fd_uobj);
7597385371425f Yishai Hadas    2019-06-30  2012  
7597385371425f Yishai Hadas    2019-06-30  2013  	ev_file = container_of(fd_uobj, struct devx_async_event_file,
7597385371425f Yishai Hadas    2019-06-30  2014  			       uobj);
7597385371425f Yishai Hadas    2019-06-30  2015  
7597385371425f Yishai Hadas    2019-06-30  2016  	if (uverbs_attr_is_valid(attrs,
7597385371425f Yishai Hadas    2019-06-30  2017  				 MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_FD_NUM)) {
7597385371425f Yishai Hadas    2019-06-30  2018  		err = uverbs_copy_from(&redirect_fd, attrs,
7597385371425f Yishai Hadas    2019-06-30  2019  			       MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_FD_NUM);
7597385371425f Yishai Hadas    2019-06-30  2020  		if (err)
7597385371425f Yishai Hadas    2019-06-30  2021  			return err;
7597385371425f Yishai Hadas    2019-06-30  2022  
7597385371425f Yishai Hadas    2019-06-30  2023  		use_eventfd = true;
7597385371425f Yishai Hadas    2019-06-30  2024  	}
7597385371425f Yishai Hadas    2019-06-30  2025  
7597385371425f Yishai Hadas    2019-06-30  2026  	if (uverbs_attr_is_valid(attrs,
7597385371425f Yishai Hadas    2019-06-30  2027  				 MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_COOKIE)) {
7597385371425f Yishai Hadas    2019-06-30  2028  		if (use_eventfd)
7597385371425f Yishai Hadas    2019-06-30  2029  			return -EINVAL;
7597385371425f Yishai Hadas    2019-06-30  2030  
7597385371425f Yishai Hadas    2019-06-30  2031  		err = uverbs_copy_from(&cookie, attrs,
7597385371425f Yishai Hadas    2019-06-30  2032  				MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_COOKIE);
7597385371425f Yishai Hadas    2019-06-30  2033  		if (err)
7597385371425f Yishai Hadas    2019-06-30  2034  			return err;
7597385371425f Yishai Hadas    2019-06-30  2035  	}
7597385371425f Yishai Hadas    2019-06-30  2036  
7597385371425f Yishai Hadas    2019-06-30  2037  	num_events = uverbs_attr_ptr_get_array_size(
7597385371425f Yishai Hadas    2019-06-30  2038  		attrs, MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_TYPE_NUM_LIST,
7597385371425f Yishai Hadas    2019-06-30  2039  		sizeof(u16));
7597385371425f Yishai Hadas    2019-06-30  2040  
7597385371425f Yishai Hadas    2019-06-30  2041  	if (num_events < 0)
7597385371425f Yishai Hadas    2019-06-30  2042  		return num_events;
7597385371425f Yishai Hadas    2019-06-30  2043  
7597385371425f Yishai Hadas    2019-06-30  2044  	if (num_events > MAX_NUM_EVENTS)
7597385371425f Yishai Hadas    2019-06-30  2045  		return -EINVAL;
7597385371425f Yishai Hadas    2019-06-30  2046  
7597385371425f Yishai Hadas    2019-06-30  2047  	event_type_num_list = uverbs_attr_get_alloced_ptr(attrs,
7597385371425f Yishai Hadas    2019-06-30  2048  			MLX5_IB_ATTR_DEVX_SUBSCRIBE_EVENT_TYPE_NUM_LIST);
7597385371425f Yishai Hadas    2019-06-30  2049  
7597385371425f Yishai Hadas    2019-06-30  2050  	if (!is_valid_events(dev->mdev, num_events, event_type_num_list, obj))
7597385371425f Yishai Hadas    2019-06-30  2051  		return -EINVAL;
7597385371425f Yishai Hadas    2019-06-30  2052  
7597385371425f Yishai Hadas    2019-06-30  2053  	INIT_LIST_HEAD(&sub_list);
7597385371425f Yishai Hadas    2019-06-30  2054  
7597385371425f Yishai Hadas    2019-06-30  2055  	/* Protect from concurrent subscriptions to same XA entries to allow
7597385371425f Yishai Hadas    2019-06-30  2056  	 * both to succeed
7597385371425f Yishai Hadas    2019-06-30  2057  	 */
7597385371425f Yishai Hadas    2019-06-30  2058  	mutex_lock(&devx_event_table->event_xa_lock);
7597385371425f Yishai Hadas    2019-06-30  2059  	for (i = 0; i < num_events; i++) {
7597385371425f Yishai Hadas    2019-06-30  2060  		u32 key_level1;
7597385371425f Yishai Hadas    2019-06-30  2061  
7597385371425f Yishai Hadas    2019-06-30  2062  		if (obj)
7597385371425f Yishai Hadas    2019-06-30  2063  			obj_type = get_dec_obj_type(obj,
7597385371425f Yishai Hadas    2019-06-30  2064  						    event_type_num_list[i]);
7597385371425f Yishai Hadas    2019-06-30  2065  		key_level1 = event_type_num_list[i] | obj_type << 16;
7597385371425f Yishai Hadas    2019-06-30  2066  
7597385371425f Yishai Hadas    2019-06-30  2067  		err = subscribe_event_xa_alloc(devx_event_table,
7597385371425f Yishai Hadas    2019-06-30  2068  					       key_level1,
7597385371425f Yishai Hadas    2019-06-30  2069  					       obj,
7597385371425f Yishai Hadas    2019-06-30  2070  					       obj_id);
7597385371425f Yishai Hadas    2019-06-30  2071  		if (err)
7597385371425f Yishai Hadas    2019-06-30  2072  			goto err;
7597385371425f Yishai Hadas    2019-06-30  2073  
7597385371425f Yishai Hadas    2019-06-30  2074  		num_alloc_xa_entries++;
7597385371425f Yishai Hadas    2019-06-30  2075  		event_sub = kzalloc(sizeof(*event_sub), GFP_KERNEL);
893d2d872d1092 YueHaibing      2021-02-22  2076  		if (!event_sub) {
893d2d872d1092 YueHaibing      2021-02-22  2077  			err = -ENOMEM
7597385371425f Yishai Hadas    2019-06-30 @2078  			goto err;
893d2d872d1092 YueHaibing      2021-02-22  2079  		}
7597385371425f Yishai Hadas    2019-06-30  2080  
7597385371425f Yishai Hadas    2019-06-30  2081  		list_add_tail(&event_sub->event_list, &sub_list);
6898d1c661d79f Jason Gunthorpe 2020-01-08  2082  		uverbs_uobject_get(&ev_file->uobj);
7597385371425f Yishai Hadas    2019-06-30  2083  		if (use_eventfd) {
7597385371425f Yishai Hadas    2019-06-30  2084  			event_sub->eventfd =
7597385371425f Yishai Hadas    2019-06-30  2085  				eventfd_ctx_fdget(redirect_fd);
7597385371425f Yishai Hadas    2019-06-30  2086  
e7e6c6320c8c9e Dan Carpenter   2019-08-07  2087  			if (IS_ERR(event_sub->eventfd)) {
7597385371425f Yishai Hadas    2019-06-30  2088  				err = PTR_ERR(event_sub->eventfd);
7597385371425f Yishai Hadas    2019-06-30  2089  				event_sub->eventfd = NULL;
7597385371425f Yishai Hadas    2019-06-30  2090  				goto err;
7597385371425f Yishai Hadas    2019-06-30  2091  			}
7597385371425f Yishai Hadas    2019-06-30  2092  		}
7597385371425f Yishai Hadas    2019-06-30  2093  
7597385371425f Yishai Hadas    2019-06-30  2094  		event_sub->cookie = cookie;
7597385371425f Yishai Hadas    2019-06-30  2095  		event_sub->ev_file = ev_file;
7597385371425f Yishai Hadas    2019-06-30  2096  		/* May be needed upon cleanup the devx object/subscription */
7597385371425f Yishai Hadas    2019-06-30  2097  		event_sub->xa_key_level1 = key_level1;
7597385371425f Yishai Hadas    2019-06-30  2098  		event_sub->xa_key_level2 = obj_id;
7597385371425f Yishai Hadas    2019-06-30  2099  		INIT_LIST_HEAD(&event_sub->obj_list);
7597385371425f Yishai Hadas    2019-06-30  2100  	}
7597385371425f Yishai Hadas    2019-06-30  2101  
7597385371425f Yishai Hadas    2019-06-30  2102  	/* Once all the allocations and the XA data insertions were done we
7597385371425f Yishai Hadas    2019-06-30  2103  	 * can go ahead and add all the subscriptions to the relevant lists
7597385371425f Yishai Hadas    2019-06-30  2104  	 * without concern of a failure.
7597385371425f Yishai Hadas    2019-06-30  2105  	 */
7597385371425f Yishai Hadas    2019-06-30  2106  	list_for_each_entry_safe(event_sub, tmp_sub, &sub_list, event_list) {
7597385371425f Yishai Hadas    2019-06-30  2107  		struct devx_event *event;
7597385371425f Yishai Hadas    2019-06-30  2108  		struct devx_obj_event *obj_event;
7597385371425f Yishai Hadas    2019-06-30  2109  
7597385371425f Yishai Hadas    2019-06-30  2110  		list_del_init(&event_sub->event_list);
7597385371425f Yishai Hadas    2019-06-30  2111  
7597385371425f Yishai Hadas    2019-06-30  2112  		spin_lock_irq(&ev_file->lock);
7597385371425f Yishai Hadas    2019-06-30  2113  		list_add_tail_rcu(&event_sub->file_list,
7597385371425f Yishai Hadas    2019-06-30  2114  				  &ev_file->subscribed_events_list);
7597385371425f Yishai Hadas    2019-06-30  2115  		spin_unlock_irq(&ev_file->lock);
7597385371425f Yishai Hadas    2019-06-30  2116  
7597385371425f Yishai Hadas    2019-06-30  2117  		event = xa_load(&devx_event_table->event_xa,
7597385371425f Yishai Hadas    2019-06-30  2118  				event_sub->xa_key_level1);
7597385371425f Yishai Hadas    2019-06-30  2119  		WARN_ON(!event);
7597385371425f Yishai Hadas    2019-06-30  2120  
7597385371425f Yishai Hadas    2019-06-30  2121  		if (!obj) {
7597385371425f Yishai Hadas    2019-06-30  2122  			list_add_tail_rcu(&event_sub->xa_list,
7597385371425f Yishai Hadas    2019-06-30  2123  					  &event->unaffiliated_list);
7597385371425f Yishai Hadas    2019-06-30  2124  			continue;
7597385371425f Yishai Hadas    2019-06-30  2125  		}
7597385371425f Yishai Hadas    2019-06-30  2126  
7597385371425f Yishai Hadas    2019-06-30  2127  		obj_event = xa_load(&event->object_ids, obj_id);
7597385371425f Yishai Hadas    2019-06-30  2128  		WARN_ON(!obj_event);
7597385371425f Yishai Hadas    2019-06-30  2129  		list_add_tail_rcu(&event_sub->xa_list,
7597385371425f Yishai Hadas    2019-06-30  2130  				  &obj_event->obj_sub_list);
7597385371425f Yishai Hadas    2019-06-30  2131  		list_add_tail_rcu(&event_sub->obj_list,
7597385371425f Yishai Hadas    2019-06-30  2132  				  &obj->event_sub);
7597385371425f Yishai Hadas    2019-06-30  2133  	}
7597385371425f Yishai Hadas    2019-06-30  2134  
7597385371425f Yishai Hadas    2019-06-30  2135  	mutex_unlock(&devx_event_table->event_xa_lock);
7597385371425f Yishai Hadas    2019-06-30  2136  	return 0;
7597385371425f Yishai Hadas    2019-06-30  2137  
7597385371425f Yishai Hadas    2019-06-30  2138  err:
7597385371425f Yishai Hadas    2019-06-30  2139  	list_for_each_entry_safe(event_sub, tmp_sub, &sub_list, event_list) {
7597385371425f Yishai Hadas    2019-06-30  2140  		list_del(&event_sub->event_list);
7597385371425f Yishai Hadas    2019-06-30  2141  
7597385371425f Yishai Hadas    2019-06-30  2142  		subscribe_event_xa_dealloc(devx_event_table,
7597385371425f Yishai Hadas    2019-06-30  2143  					   event_sub->xa_key_level1,
7597385371425f Yishai Hadas    2019-06-30  2144  					   obj,
7597385371425f Yishai Hadas    2019-06-30  2145  					   obj_id);
7597385371425f Yishai Hadas    2019-06-30  2146  
7597385371425f Yishai Hadas    2019-06-30  2147  		if (event_sub->eventfd)
7597385371425f Yishai Hadas    2019-06-30  2148  			eventfd_ctx_put(event_sub->eventfd);
6898d1c661d79f Jason Gunthorpe 2020-01-08  2149  		uverbs_uobject_put(&event_sub->ev_file->uobj);
7597385371425f Yishai Hadas    2019-06-30  2150  		kfree(event_sub);
7597385371425f Yishai Hadas    2019-06-30  2151  	}
7597385371425f Yishai Hadas    2019-06-30  2152  
7597385371425f Yishai Hadas    2019-06-30  2153  	mutex_unlock(&devx_event_table->event_xa_lock);
7597385371425f Yishai Hadas    2019-06-30  2154  	return err;
7597385371425f Yishai Hadas    2019-06-30  2155  }
7597385371425f Yishai Hadas    2019-06-30  2156  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 67522 bytes --]

  reply	other threads:[~2021-02-22 12:13 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-22  8:25 [PATCH -next] IB/mlx5: Add missing error code YueHaibing
2021-02-22 12:12 ` kernel test robot [this message]
2021-02-22 12:12   ` kernel test robot
2021-02-22 12:23 ` [PATCH v2 " YueHaibing
2021-02-22 13:23   ` Leon Romanovsky
2021-02-22 14:21     ` YueHaibing
2021-03-01 18:49   ` Jason Gunthorpe

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=202102222006.Y9H5ylzk-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=dledford@redhat.com \
    --cc=jgg@ziepe.ca \
    --cc=kbuild-all@lists.01.org \
    --cc=leon@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=yishaih@nvidia.com \
    --cc=yuehaibing@huawei.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.