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 --]
next prev parent 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.