All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH -next] IB/mlx5: Add missing error code
@ 2021-02-22  8:25 YueHaibing
  2021-02-22 12:12   ` kernel test robot
  2021-02-22 12:23 ` [PATCH v2 " YueHaibing
  0 siblings, 2 replies; 7+ messages in thread
From: YueHaibing @ 2021-02-22  8:25 UTC (permalink / raw)
  To: leon, dledford, jgg, yishaih; +Cc: linux-rdma, linux-kernel, YueHaibing

Set err to -ENOMEM if kzalloc fails instead of 0.

Fixes: 759738537142 ("IB/mlx5: Enable subscription for device events over DEVX")
Signed-off-by: YueHaibing <yuehaibing@huawei.com>
---
 drivers/infiniband/hw/mlx5/devx.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/hw/mlx5/devx.c b/drivers/infiniband/hw/mlx5/devx.c
index ebc2a4355fa5..3c8e6a25465d 100644
--- a/drivers/infiniband/hw/mlx5/devx.c
+++ b/drivers/infiniband/hw/mlx5/devx.c
@@ -2073,8 +2073,10 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_DEVX_SUBSCRIBE_EVENT)(
 
 		num_alloc_xa_entries++;
 		event_sub = kzalloc(sizeof(*event_sub), GFP_KERNEL);
-		if (!event_sub)
+		if (!event_sub) {
+			err = -ENOMEM
 			goto err;
+		}
 
 		list_add_tail(&event_sub->event_list, &sub_list);
 		uverbs_uobject_get(&ev_file->uobj);
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH -next] IB/mlx5: Add missing error code
  2021-02-22  8:25 [PATCH -next] IB/mlx5: Add missing error code YueHaibing
@ 2021-02-22 12:12   ` kernel test robot
  2021-02-22 12:23 ` [PATCH v2 " YueHaibing
  1 sibling, 0 replies; 7+ messages in thread
From: kernel test robot @ 2021-02-22 12:12 UTC (permalink / raw)
  To: YueHaibing, leon, dledford, jgg, yishaih
  Cc: kbuild-all, linux-rdma, linux-kernel, YueHaibing

[-- 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 --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH -next] IB/mlx5: Add missing error code
@ 2021-02-22 12:12   ` kernel test robot
  0 siblings, 0 replies; 7+ messages in thread
From: kernel test robot @ 2021-02-22 12:12 UTC (permalink / raw)
  To: kbuild-all

[-- 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 --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2 -next] IB/mlx5: Add missing error code
  2021-02-22  8:25 [PATCH -next] IB/mlx5: Add missing error code YueHaibing
  2021-02-22 12:12   ` kernel test robot
@ 2021-02-22 12:23 ` YueHaibing
  2021-02-22 13:23   ` Leon Romanovsky
  2021-03-01 18:49   ` Jason Gunthorpe
  1 sibling, 2 replies; 7+ messages in thread
From: YueHaibing @ 2021-02-22 12:23 UTC (permalink / raw)
  To: leon, dledford, jgg, yishaih; +Cc: linux-rdma, linux-kernel, YueHaibing

Set err to -ENOMEM if kzalloc fails instead of 0.

Fixes: 759738537142 ("IB/mlx5: Enable subscription for device events over DEVX")
Signed-off-by: YueHaibing <yuehaibing@huawei.com>
---
 drivers/infiniband/hw/mlx5/devx.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/hw/mlx5/devx.c b/drivers/infiniband/hw/mlx5/devx.c
index ebc2a4355fa5..3c8e6a25465d 100644
--- a/drivers/infiniband/hw/mlx5/devx.c
+++ b/drivers/infiniband/hw/mlx5/devx.c
@@ -2073,8 +2073,10 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_DEVX_SUBSCRIBE_EVENT)(
 
 		num_alloc_xa_entries++;
 		event_sub = kzalloc(sizeof(*event_sub), GFP_KERNEL);
-		if (!event_sub)
+		if (!event_sub) {
+			err = -ENOMEM;
 			goto err;
+		}
 
 		list_add_tail(&event_sub->event_list, &sub_list);
 		uverbs_uobject_get(&ev_file->uobj);
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 -next] IB/mlx5: Add missing error code
  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
  1 sibling, 1 reply; 7+ messages in thread
From: Leon Romanovsky @ 2021-02-22 13:23 UTC (permalink / raw)
  To: YueHaibing; +Cc: dledford, jgg, yishaih, linux-rdma, linux-kernel

On Mon, Feb 22, 2021 at 08:23:43PM +0800, YueHaibing wrote:
> Set err to -ENOMEM if kzalloc fails instead of 0.
>
> Fixes: 759738537142 ("IB/mlx5: Enable subscription for device events over DEVX")
> Signed-off-by: YueHaibing <yuehaibing@huawei.com>
> ---
>  drivers/infiniband/hw/mlx5/devx.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>

Thanks,
Acked-by: Leon Romanovsky <leonro@nvidia.com>

And please don't send new version of patches as a reply-to, it is
annoying like hell.

Thanks

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 -next] IB/mlx5: Add missing error code
  2021-02-22 13:23   ` Leon Romanovsky
@ 2021-02-22 14:21     ` YueHaibing
  0 siblings, 0 replies; 7+ messages in thread
From: YueHaibing @ 2021-02-22 14:21 UTC (permalink / raw)
  To: Leon Romanovsky; +Cc: dledford, jgg, yishaih, linux-rdma, linux-kernel

On 2021/2/22 21:23, Leon Romanovsky wrote:
> On Mon, Feb 22, 2021 at 08:23:43PM +0800, YueHaibing wrote:
>> Set err to -ENOMEM if kzalloc fails instead of 0.
>>
>> Fixes: 759738537142 ("IB/mlx5: Enable subscription for device events over DEVX")
>> Signed-off-by: YueHaibing <yuehaibing@huawei.com>
>> ---
>>  drivers/infiniband/hw/mlx5/devx.c | 4 +++-
>>  1 file changed, 3 insertions(+), 1 deletion(-)
>>
> 
> Thanks,
> Acked-by: Leon Romanovsky <leonro@nvidia.com>
> 
> And please don't send new version of patches as a reply-to, it is
> annoying like hell.

Ok, Got it.

> Thanks
> .
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 -next] IB/mlx5: Add missing error code
  2021-02-22 12:23 ` [PATCH v2 " YueHaibing
  2021-02-22 13:23   ` Leon Romanovsky
@ 2021-03-01 18:49   ` Jason Gunthorpe
  1 sibling, 0 replies; 7+ messages in thread
From: Jason Gunthorpe @ 2021-03-01 18:49 UTC (permalink / raw)
  To: YueHaibing; +Cc: leon, dledford, yishaih, linux-rdma, linux-kernel

On Mon, Feb 22, 2021 at 08:23:43PM +0800, YueHaibing wrote:
> Set err to -ENOMEM if kzalloc fails instead of 0.
> 
> Fixes: 759738537142 ("IB/mlx5: Enable subscription for device events over DEVX")
> Signed-off-by: YueHaibing <yuehaibing@huawei.com>
> Acked-by: Leon Romanovsky <leonro@nvidia.com>
> ---
>  drivers/infiniband/hw/mlx5/devx.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)

Applied to for-rc, thanks

Jason

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-03-01 18:54 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-22  8:25 [PATCH -next] IB/mlx5: Add missing error code YueHaibing
2021-02-22 12:12 ` kernel test robot
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

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.