From: kbuild test robot <lkp@intel.com>
To: Zhangfei Gao <zhangfei.gao@linaro.org>
Cc: kbuild-all@lists.01.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Arnd Bergmann <arnd@arndb.de>,
Herbert Xu <herbert@gondor.apana.org.au>,
jonathan.cameron@huawei.com, grant.likely@arm.com,
jean-philippe <jean-philippe@linaro.org>,
Jerome Glisse <jglisse@redhat.com>,
ilias.apalodimas@linaro.org, francois.ozog@linaro.org,
kenneth-lee-2012@foxmail.com, Wangzhou <wangzhou1@hisilicon.com>,
"haojian . zhuang" <haojian.zhuang@linaro.org>,
guodong.xu@linaro.org, linux-accelerators@lists.ozlabs.org,
linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org,
iommu@lists.linux-foundation.org,
Kenneth Lee <liguozhu@hisilicon.com>,
Zaibo Xu <xuzaibo@huawei.com>,
Zhangfei Gao <zhangfei.gao@linaro.org>
Subject: Re: [RESEND PATCH v9 2/4] uacce: add uacce driver
Date: Wed, 11 Dec 2019 08:09:41 +0800 [thread overview]
Message-ID: <201912110600.7K87vvu4%lkp@intel.com> (raw)
In-Reply-To: <1575945755-27380-3-git-send-email-zhangfei.gao@linaro.org>
[-- Attachment #1: Type: text/plain, Size: 13463 bytes --]
Hi Zhangfei,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on cryptodev/master]
[also build test ERROR on crypto/master char-misc/char-misc-testing v5.5-rc1 next-20191210]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Zhangfei-Gao/Add-uacce-module-for-Accelerator/20191210-160210
base: https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master
config: sparc64-allmodconfig (attached as .config)
compiler: sparc64-linux-gcc (GCC) 7.5.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.5.0 make.cross ARCH=sparc64
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/misc/uacce/uacce.c:112:15: error: variable 'uacce_sva_ops' has initializer but incomplete type
static struct iommu_sva_ops uacce_sva_ops = {
^~~~~~~~~~~~~
drivers/misc/uacce/uacce.c:113:3: error: 'struct iommu_sva_ops' has no member named 'mm_exit'
.mm_exit = uacce_sva_exit,
^~~~~~~
drivers/misc/uacce/uacce.c:113:13: warning: excess elements in struct initializer
.mm_exit = uacce_sva_exit,
^~~~~~~~~~~~~~
drivers/misc/uacce/uacce.c:113:13: note: (near initialization for 'uacce_sva_ops')
drivers/misc/uacce/uacce.c: In function 'uacce_mm_get':
drivers/misc/uacce/uacce.c:144:12: error: implicit declaration of function 'iommu_sva_bind_device'; did you mean 'bus_find_device'? [-Werror=implicit-function-declaration]
handle = iommu_sva_bind_device(uacce->parent, mm, uacce_mm);
^~~~~~~~~~~~~~~~~~~~~
bus_find_device
drivers/misc/uacce/uacce.c:144:10: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
handle = iommu_sva_bind_device(uacce->parent, mm, uacce_mm);
^
drivers/misc/uacce/uacce.c:148:9: error: implicit declaration of function 'iommu_sva_set_ops'; did you mean 'iommu_setup_dma_ops'? [-Werror=implicit-function-declaration]
ret = iommu_sva_set_ops(handle, &uacce_sva_ops);
^~~~~~~~~~~~~~~~~
iommu_setup_dma_ops
drivers/misc/uacce/uacce.c:152:21: error: implicit declaration of function 'iommu_sva_get_pasid' [-Werror=implicit-function-declaration]
uacce_mm->pasid = iommu_sva_get_pasid(handle);
^~~~~~~~~~~~~~~~~~~
>> drivers/misc/uacce/uacce.c:153:26: error: 'IOMMU_PASID_INVALID' undeclared (first use in this function); did you mean 'HV_MSIVALID_INVALID'?
if (uacce_mm->pasid == IOMMU_PASID_INVALID)
^~~~~~~~~~~~~~~~~~~
HV_MSIVALID_INVALID
drivers/misc/uacce/uacce.c:153:26: note: each undeclared identifier is reported only once for each function it appears in
drivers/misc/uacce/uacce.c:168:3: error: implicit declaration of function 'iommu_sva_unbind_device'; did you mean 'bus_find_device'? [-Werror=implicit-function-declaration]
iommu_sva_unbind_device(handle);
^~~~~~~~~~~~~~~~~~~~~~~
bus_find_device
drivers/misc/uacce/uacce.c: At top level:
>> drivers/misc/uacce/uacce.c:274:21: error: variable 'uacce_vm_ops' has initializer but incomplete type
static const struct vm_operations_struct uacce_vm_ops = {
^~~~~~~~~~~~~~~~~~~~
>> drivers/misc/uacce/uacce.c:275:3: error: 'const struct vm_operations_struct' has no member named 'close'
.close = uacce_vma_close,
^~~~~
drivers/misc/uacce/uacce.c:275:11: warning: excess elements in struct initializer
.close = uacce_vma_close,
^~~~~~~~~~~~~~~
drivers/misc/uacce/uacce.c:275:11: note: (near initialization for 'uacce_vm_ops')
drivers/misc/uacce/uacce.c: In function 'uacce_fops_mmap':
>> drivers/misc/uacce/uacce.c:295:19: error: 'VM_DONTCOPY' undeclared (first use in this function)
vma->vm_flags |= VM_DONTCOPY | VM_DONTEXPAND | VM_WIPEONFORK;
^~~~~~~~~~~
>> drivers/misc/uacce/uacce.c:295:33: error: 'VM_DONTEXPAND' undeclared (first use in this function); did you mean 'VM_DONTCOPY'?
vma->vm_flags |= VM_DONTCOPY | VM_DONTEXPAND | VM_WIPEONFORK;
^~~~~~~~~~~~~
VM_DONTCOPY
>> drivers/misc/uacce/uacce.c:295:49: error: 'VM_WIPEONFORK' undeclared (first use in this function)
vma->vm_flags |= VM_DONTCOPY | VM_DONTEXPAND | VM_WIPEONFORK;
^~~~~~~~~~~~~
drivers/misc/uacce/uacce.c: In function 'uacce_alloc':
drivers/misc/uacce/uacce.c:502:9: error: implicit declaration of function 'iommu_dev_enable_feature'; did you mean 'module_enable_ro'? [-Werror=implicit-function-declaration]
ret = iommu_dev_enable_feature(parent, IOMMU_DEV_FEAT_SVA);
^~~~~~~~~~~~~~~~~~~~~~~~
module_enable_ro
drivers/misc/uacce/uacce.c:502:42: error: 'IOMMU_DEV_FEAT_SVA' undeclared (first use in this function); did you mean 'NOMMU_VMFLAGS'?
ret = iommu_dev_enable_feature(parent, IOMMU_DEV_FEAT_SVA);
^~~~~~~~~~~~~~~~~~
NOMMU_VMFLAGS
drivers/misc/uacce/uacce.c:530:3: error: implicit declaration of function 'iommu_dev_disable_feature'; did you mean 'module_disable_ro'? [-Werror=implicit-function-declaration]
iommu_dev_disable_feature(uacce->parent, IOMMU_DEV_FEAT_SVA);
^~~~~~~~~~~~~~~~~~~~~~~~~
module_disable_ro
drivers/misc/uacce/uacce.c: In function 'uacce_remove':
drivers/misc/uacce/uacce.c:592:44: error: 'IOMMU_DEV_FEAT_SVA' undeclared (first use in this function); did you mean 'NOMMU_VMFLAGS'?
iommu_dev_disable_feature(uacce->parent, IOMMU_DEV_FEAT_SVA);
^~~~~~~~~~~~~~~~~~
NOMMU_VMFLAGS
drivers/misc/uacce/uacce.c: At top level:
drivers/misc/uacce/uacce.c:112:29: error: storage size of 'uacce_sva_ops' isn't known
static struct iommu_sva_ops uacce_sva_ops = {
^~~~~~~~~~~~~
>> drivers/misc/uacce/uacce.c:274:42: error: storage size of 'uacce_vm_ops' isn't known
static const struct vm_operations_struct uacce_vm_ops = {
^~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +153 drivers/misc/uacce/uacce.c
115
116 static struct uacce_mm *uacce_mm_get(struct uacce_device *uacce,
117 struct uacce_queue *q,
118 struct mm_struct *mm)
119 {
120 struct uacce_mm *uacce_mm = NULL;
121 struct iommu_sva *handle = NULL;
122 int ret;
123
124 lockdep_assert_held(&uacce->mm_lock);
125
126 list_for_each_entry(uacce_mm, &uacce->mm_list, list) {
127 if (uacce_mm->mm == mm) {
128 mutex_lock(&uacce_mm->lock);
129 list_add(&q->list, &uacce_mm->queues);
130 mutex_unlock(&uacce_mm->lock);
131 return uacce_mm;
132 }
133 }
134
135 uacce_mm = kzalloc(sizeof(*uacce_mm), GFP_KERNEL);
136 if (!uacce_mm)
137 return NULL;
138
139 if (uacce->flags & UACCE_DEV_SVA) {
140 /*
141 * Safe to pass an incomplete uacce_mm, since mm_exit cannot
142 * fire while we hold a reference to the mm.
143 */
144 handle = iommu_sva_bind_device(uacce->parent, mm, uacce_mm);
145 if (IS_ERR(handle))
146 goto err_free;
147
> 148 ret = iommu_sva_set_ops(handle, &uacce_sva_ops);
149 if (ret)
150 goto err_unbind;
151
152 uacce_mm->pasid = iommu_sva_get_pasid(handle);
> 153 if (uacce_mm->pasid == IOMMU_PASID_INVALID)
154 goto err_unbind;
155 }
156
157 uacce_mm->mm = mm;
158 uacce_mm->handle = handle;
159 INIT_LIST_HEAD(&uacce_mm->queues);
160 mutex_init(&uacce_mm->lock);
161 list_add(&q->list, &uacce_mm->queues);
162 list_add(&uacce_mm->list, &uacce->mm_list);
163
164 return uacce_mm;
165
166 err_unbind:
167 if (handle)
168 iommu_sva_unbind_device(handle);
169 err_free:
170 kfree(uacce_mm);
171 return NULL;
172 }
173
174 static void uacce_mm_put(struct uacce_queue *q)
175 {
176 struct uacce_mm *uacce_mm = q->uacce_mm;
177
178 lockdep_assert_held(&q->uacce->mm_lock);
179
180 mutex_lock(&uacce_mm->lock);
181 list_del(&q->list);
182 mutex_unlock(&uacce_mm->lock);
183
184 if (list_empty(&uacce_mm->queues)) {
185 if (uacce_mm->handle)
186 iommu_sva_unbind_device(uacce_mm->handle);
187 list_del(&uacce_mm->list);
188 kfree(uacce_mm);
189 }
190 }
191
192 static int uacce_fops_open(struct inode *inode, struct file *filep)
193 {
194 struct uacce_mm *uacce_mm = NULL;
195 struct uacce_device *uacce;
196 struct uacce_queue *q;
197 int ret = 0;
198
199 uacce = xa_load(&uacce_xa, iminor(inode));
200 if (!uacce)
201 return -ENODEV;
202
203 if (!try_module_get(uacce->parent->driver->owner))
204 return -ENODEV;
205
206 q = kzalloc(sizeof(struct uacce_queue), GFP_KERNEL);
207 if (!q) {
208 ret = -ENOMEM;
209 goto out_with_module;
210 }
211
212 mutex_lock(&uacce->mm_lock);
213 uacce_mm = uacce_mm_get(uacce, q, current->mm);
214 mutex_unlock(&uacce->mm_lock);
215 if (!uacce_mm) {
216 ret = -ENOMEM;
217 goto out_with_mem;
218 }
219
220 q->uacce = uacce;
221 q->uacce_mm = uacce_mm;
222
223 if (uacce->ops->get_queue) {
224 ret = uacce->ops->get_queue(uacce, uacce_mm->pasid, q);
225 if (ret < 0)
226 goto out_with_mm;
227 }
228
229 init_waitqueue_head(&q->wait);
230 filep->private_data = q;
231 q->state = UACCE_Q_INIT;
232
233 return 0;
234
235 out_with_mm:
236 mutex_lock(&uacce->mm_lock);
237 uacce_mm_put(q);
238 mutex_unlock(&uacce->mm_lock);
239 out_with_mem:
240 kfree(q);
241 out_with_module:
242 module_put(uacce->parent->driver->owner);
243 return ret;
244 }
245
246 static int uacce_fops_release(struct inode *inode, struct file *filep)
247 {
248 struct uacce_queue *q = filep->private_data;
249 struct uacce_device *uacce = q->uacce;
250
251 uacce_put_queue(q);
252
253 mutex_lock(&uacce->mm_lock);
254 uacce_mm_put(q);
255 mutex_unlock(&uacce->mm_lock);
256
257 kfree(q);
258 module_put(uacce->parent->driver->owner);
259
260 return 0;
261 }
262
263 static void uacce_vma_close(struct vm_area_struct *vma)
264 {
265 struct uacce_queue *q = vma->vm_private_data;
266 struct uacce_qfile_region *qfr = NULL;
267
268 if (vma->vm_pgoff < UACCE_MAX_REGION)
269 qfr = q->qfrs[vma->vm_pgoff];
270
271 kfree(qfr);
272 }
273
> 274 static const struct vm_operations_struct uacce_vm_ops = {
> 275 .close = uacce_vma_close,
276 };
277
278 static int uacce_fops_mmap(struct file *filep, struct vm_area_struct *vma)
279 {
280 struct uacce_queue *q = filep->private_data;
281 struct uacce_device *uacce = q->uacce;
282 struct uacce_qfile_region *qfr;
283 enum uacce_qfrt type = UACCE_MAX_REGION;
284 int ret = 0;
285
286 if (vma->vm_pgoff < UACCE_MAX_REGION)
287 type = vma->vm_pgoff;
288 else
289 return -EINVAL;
290
291 qfr = kzalloc(sizeof(*qfr), GFP_KERNEL);
292 if (!qfr)
293 return -ENOMEM;
294
> 295 vma->vm_flags |= VM_DONTCOPY | VM_DONTEXPAND | VM_WIPEONFORK;
296 vma->vm_ops = &uacce_vm_ops;
297 vma->vm_private_data = q;
298 qfr->type = type;
299
300 mutex_lock(&uacce_mutex);
301
302 if (q->state != UACCE_Q_INIT && q->state != UACCE_Q_STARTED) {
303 ret = -EINVAL;
304 goto out_with_lock;
305 }
306
307 if (q->qfrs[type]) {
308 ret = -EEXIST;
309 goto out_with_lock;
310 }
311
312 switch (type) {
313 case UACCE_QFRT_MMIO:
314 if (!uacce->ops->mmap) {
315 ret = -EINVAL;
316 goto out_with_lock;
317 }
318
319 ret = uacce->ops->mmap(q, vma, qfr);
320 if (ret)
321 goto out_with_lock;
322
323 break;
324
325 case UACCE_QFRT_DUS:
326 if (uacce->flags & UACCE_DEV_SVA) {
327 if (!uacce->ops->mmap) {
328 ret = -EINVAL;
329 goto out_with_lock;
330 }
331
332 ret = uacce->ops->mmap(q, vma, qfr);
333 if (ret)
334 goto out_with_lock;
335 }
336 break;
337
338 default:
339 ret = -EINVAL;
340 goto out_with_lock;
341 }
342
343 q->qfrs[type] = qfr;
344 mutex_unlock(&uacce_mutex);
345
346 return ret;
347
348 out_with_lock:
349 mutex_unlock(&uacce_mutex);
350 kfree(qfr);
351 return ret;
352 }
353
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 59358 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: kbuild test robot <lkp@intel.com>
To: Zhangfei Gao <zhangfei.gao@linaro.org>
Cc: jean-philippe <jean-philippe@linaro.org>,
kbuild-all@lists.01.org, Herbert Xu <herbert@gondor.apana.org.au>,
Arnd Bergmann <arnd@arndb.de>,
francois.ozog@linaro.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
ilias.apalodimas@linaro.org, iommu@lists.linux-foundation.org,
linux-kernel@vger.kernel.org, Jerome Glisse <jglisse@redhat.com>,
grant.likely@arm.com,
"haojian . zhuang" <haojian.zhuang@linaro.org>,
linux-accelerators@lists.ozlabs.org,
linux-crypto@vger.kernel.org,
Zhangfei Gao <zhangfei.gao@linaro.org>,
Kenneth Lee <liguozhu@hisilicon.com>,
guodong.xu@linaro.org, kenneth-lee-2012@foxmail.com
Subject: Re: [RESEND PATCH v9 2/4] uacce: add uacce driver
Date: Wed, 11 Dec 2019 08:09:41 +0800 [thread overview]
Message-ID: <201912110600.7K87vvu4%lkp@intel.com> (raw)
In-Reply-To: <1575945755-27380-3-git-send-email-zhangfei.gao@linaro.org>
[-- Attachment #1: Type: text/plain, Size: 13463 bytes --]
Hi Zhangfei,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on cryptodev/master]
[also build test ERROR on crypto/master char-misc/char-misc-testing v5.5-rc1 next-20191210]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Zhangfei-Gao/Add-uacce-module-for-Accelerator/20191210-160210
base: https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master
config: sparc64-allmodconfig (attached as .config)
compiler: sparc64-linux-gcc (GCC) 7.5.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.5.0 make.cross ARCH=sparc64
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/misc/uacce/uacce.c:112:15: error: variable 'uacce_sva_ops' has initializer but incomplete type
static struct iommu_sva_ops uacce_sva_ops = {
^~~~~~~~~~~~~
drivers/misc/uacce/uacce.c:113:3: error: 'struct iommu_sva_ops' has no member named 'mm_exit'
.mm_exit = uacce_sva_exit,
^~~~~~~
drivers/misc/uacce/uacce.c:113:13: warning: excess elements in struct initializer
.mm_exit = uacce_sva_exit,
^~~~~~~~~~~~~~
drivers/misc/uacce/uacce.c:113:13: note: (near initialization for 'uacce_sva_ops')
drivers/misc/uacce/uacce.c: In function 'uacce_mm_get':
drivers/misc/uacce/uacce.c:144:12: error: implicit declaration of function 'iommu_sva_bind_device'; did you mean 'bus_find_device'? [-Werror=implicit-function-declaration]
handle = iommu_sva_bind_device(uacce->parent, mm, uacce_mm);
^~~~~~~~~~~~~~~~~~~~~
bus_find_device
drivers/misc/uacce/uacce.c:144:10: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
handle = iommu_sva_bind_device(uacce->parent, mm, uacce_mm);
^
drivers/misc/uacce/uacce.c:148:9: error: implicit declaration of function 'iommu_sva_set_ops'; did you mean 'iommu_setup_dma_ops'? [-Werror=implicit-function-declaration]
ret = iommu_sva_set_ops(handle, &uacce_sva_ops);
^~~~~~~~~~~~~~~~~
iommu_setup_dma_ops
drivers/misc/uacce/uacce.c:152:21: error: implicit declaration of function 'iommu_sva_get_pasid' [-Werror=implicit-function-declaration]
uacce_mm->pasid = iommu_sva_get_pasid(handle);
^~~~~~~~~~~~~~~~~~~
>> drivers/misc/uacce/uacce.c:153:26: error: 'IOMMU_PASID_INVALID' undeclared (first use in this function); did you mean 'HV_MSIVALID_INVALID'?
if (uacce_mm->pasid == IOMMU_PASID_INVALID)
^~~~~~~~~~~~~~~~~~~
HV_MSIVALID_INVALID
drivers/misc/uacce/uacce.c:153:26: note: each undeclared identifier is reported only once for each function it appears in
drivers/misc/uacce/uacce.c:168:3: error: implicit declaration of function 'iommu_sva_unbind_device'; did you mean 'bus_find_device'? [-Werror=implicit-function-declaration]
iommu_sva_unbind_device(handle);
^~~~~~~~~~~~~~~~~~~~~~~
bus_find_device
drivers/misc/uacce/uacce.c: At top level:
>> drivers/misc/uacce/uacce.c:274:21: error: variable 'uacce_vm_ops' has initializer but incomplete type
static const struct vm_operations_struct uacce_vm_ops = {
^~~~~~~~~~~~~~~~~~~~
>> drivers/misc/uacce/uacce.c:275:3: error: 'const struct vm_operations_struct' has no member named 'close'
.close = uacce_vma_close,
^~~~~
drivers/misc/uacce/uacce.c:275:11: warning: excess elements in struct initializer
.close = uacce_vma_close,
^~~~~~~~~~~~~~~
drivers/misc/uacce/uacce.c:275:11: note: (near initialization for 'uacce_vm_ops')
drivers/misc/uacce/uacce.c: In function 'uacce_fops_mmap':
>> drivers/misc/uacce/uacce.c:295:19: error: 'VM_DONTCOPY' undeclared (first use in this function)
vma->vm_flags |= VM_DONTCOPY | VM_DONTEXPAND | VM_WIPEONFORK;
^~~~~~~~~~~
>> drivers/misc/uacce/uacce.c:295:33: error: 'VM_DONTEXPAND' undeclared (first use in this function); did you mean 'VM_DONTCOPY'?
vma->vm_flags |= VM_DONTCOPY | VM_DONTEXPAND | VM_WIPEONFORK;
^~~~~~~~~~~~~
VM_DONTCOPY
>> drivers/misc/uacce/uacce.c:295:49: error: 'VM_WIPEONFORK' undeclared (first use in this function)
vma->vm_flags |= VM_DONTCOPY | VM_DONTEXPAND | VM_WIPEONFORK;
^~~~~~~~~~~~~
drivers/misc/uacce/uacce.c: In function 'uacce_alloc':
drivers/misc/uacce/uacce.c:502:9: error: implicit declaration of function 'iommu_dev_enable_feature'; did you mean 'module_enable_ro'? [-Werror=implicit-function-declaration]
ret = iommu_dev_enable_feature(parent, IOMMU_DEV_FEAT_SVA);
^~~~~~~~~~~~~~~~~~~~~~~~
module_enable_ro
drivers/misc/uacce/uacce.c:502:42: error: 'IOMMU_DEV_FEAT_SVA' undeclared (first use in this function); did you mean 'NOMMU_VMFLAGS'?
ret = iommu_dev_enable_feature(parent, IOMMU_DEV_FEAT_SVA);
^~~~~~~~~~~~~~~~~~
NOMMU_VMFLAGS
drivers/misc/uacce/uacce.c:530:3: error: implicit declaration of function 'iommu_dev_disable_feature'; did you mean 'module_disable_ro'? [-Werror=implicit-function-declaration]
iommu_dev_disable_feature(uacce->parent, IOMMU_DEV_FEAT_SVA);
^~~~~~~~~~~~~~~~~~~~~~~~~
module_disable_ro
drivers/misc/uacce/uacce.c: In function 'uacce_remove':
drivers/misc/uacce/uacce.c:592:44: error: 'IOMMU_DEV_FEAT_SVA' undeclared (first use in this function); did you mean 'NOMMU_VMFLAGS'?
iommu_dev_disable_feature(uacce->parent, IOMMU_DEV_FEAT_SVA);
^~~~~~~~~~~~~~~~~~
NOMMU_VMFLAGS
drivers/misc/uacce/uacce.c: At top level:
drivers/misc/uacce/uacce.c:112:29: error: storage size of 'uacce_sva_ops' isn't known
static struct iommu_sva_ops uacce_sva_ops = {
^~~~~~~~~~~~~
>> drivers/misc/uacce/uacce.c:274:42: error: storage size of 'uacce_vm_ops' isn't known
static const struct vm_operations_struct uacce_vm_ops = {
^~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +153 drivers/misc/uacce/uacce.c
115
116 static struct uacce_mm *uacce_mm_get(struct uacce_device *uacce,
117 struct uacce_queue *q,
118 struct mm_struct *mm)
119 {
120 struct uacce_mm *uacce_mm = NULL;
121 struct iommu_sva *handle = NULL;
122 int ret;
123
124 lockdep_assert_held(&uacce->mm_lock);
125
126 list_for_each_entry(uacce_mm, &uacce->mm_list, list) {
127 if (uacce_mm->mm == mm) {
128 mutex_lock(&uacce_mm->lock);
129 list_add(&q->list, &uacce_mm->queues);
130 mutex_unlock(&uacce_mm->lock);
131 return uacce_mm;
132 }
133 }
134
135 uacce_mm = kzalloc(sizeof(*uacce_mm), GFP_KERNEL);
136 if (!uacce_mm)
137 return NULL;
138
139 if (uacce->flags & UACCE_DEV_SVA) {
140 /*
141 * Safe to pass an incomplete uacce_mm, since mm_exit cannot
142 * fire while we hold a reference to the mm.
143 */
144 handle = iommu_sva_bind_device(uacce->parent, mm, uacce_mm);
145 if (IS_ERR(handle))
146 goto err_free;
147
> 148 ret = iommu_sva_set_ops(handle, &uacce_sva_ops);
149 if (ret)
150 goto err_unbind;
151
152 uacce_mm->pasid = iommu_sva_get_pasid(handle);
> 153 if (uacce_mm->pasid == IOMMU_PASID_INVALID)
154 goto err_unbind;
155 }
156
157 uacce_mm->mm = mm;
158 uacce_mm->handle = handle;
159 INIT_LIST_HEAD(&uacce_mm->queues);
160 mutex_init(&uacce_mm->lock);
161 list_add(&q->list, &uacce_mm->queues);
162 list_add(&uacce_mm->list, &uacce->mm_list);
163
164 return uacce_mm;
165
166 err_unbind:
167 if (handle)
168 iommu_sva_unbind_device(handle);
169 err_free:
170 kfree(uacce_mm);
171 return NULL;
172 }
173
174 static void uacce_mm_put(struct uacce_queue *q)
175 {
176 struct uacce_mm *uacce_mm = q->uacce_mm;
177
178 lockdep_assert_held(&q->uacce->mm_lock);
179
180 mutex_lock(&uacce_mm->lock);
181 list_del(&q->list);
182 mutex_unlock(&uacce_mm->lock);
183
184 if (list_empty(&uacce_mm->queues)) {
185 if (uacce_mm->handle)
186 iommu_sva_unbind_device(uacce_mm->handle);
187 list_del(&uacce_mm->list);
188 kfree(uacce_mm);
189 }
190 }
191
192 static int uacce_fops_open(struct inode *inode, struct file *filep)
193 {
194 struct uacce_mm *uacce_mm = NULL;
195 struct uacce_device *uacce;
196 struct uacce_queue *q;
197 int ret = 0;
198
199 uacce = xa_load(&uacce_xa, iminor(inode));
200 if (!uacce)
201 return -ENODEV;
202
203 if (!try_module_get(uacce->parent->driver->owner))
204 return -ENODEV;
205
206 q = kzalloc(sizeof(struct uacce_queue), GFP_KERNEL);
207 if (!q) {
208 ret = -ENOMEM;
209 goto out_with_module;
210 }
211
212 mutex_lock(&uacce->mm_lock);
213 uacce_mm = uacce_mm_get(uacce, q, current->mm);
214 mutex_unlock(&uacce->mm_lock);
215 if (!uacce_mm) {
216 ret = -ENOMEM;
217 goto out_with_mem;
218 }
219
220 q->uacce = uacce;
221 q->uacce_mm = uacce_mm;
222
223 if (uacce->ops->get_queue) {
224 ret = uacce->ops->get_queue(uacce, uacce_mm->pasid, q);
225 if (ret < 0)
226 goto out_with_mm;
227 }
228
229 init_waitqueue_head(&q->wait);
230 filep->private_data = q;
231 q->state = UACCE_Q_INIT;
232
233 return 0;
234
235 out_with_mm:
236 mutex_lock(&uacce->mm_lock);
237 uacce_mm_put(q);
238 mutex_unlock(&uacce->mm_lock);
239 out_with_mem:
240 kfree(q);
241 out_with_module:
242 module_put(uacce->parent->driver->owner);
243 return ret;
244 }
245
246 static int uacce_fops_release(struct inode *inode, struct file *filep)
247 {
248 struct uacce_queue *q = filep->private_data;
249 struct uacce_device *uacce = q->uacce;
250
251 uacce_put_queue(q);
252
253 mutex_lock(&uacce->mm_lock);
254 uacce_mm_put(q);
255 mutex_unlock(&uacce->mm_lock);
256
257 kfree(q);
258 module_put(uacce->parent->driver->owner);
259
260 return 0;
261 }
262
263 static void uacce_vma_close(struct vm_area_struct *vma)
264 {
265 struct uacce_queue *q = vma->vm_private_data;
266 struct uacce_qfile_region *qfr = NULL;
267
268 if (vma->vm_pgoff < UACCE_MAX_REGION)
269 qfr = q->qfrs[vma->vm_pgoff];
270
271 kfree(qfr);
272 }
273
> 274 static const struct vm_operations_struct uacce_vm_ops = {
> 275 .close = uacce_vma_close,
276 };
277
278 static int uacce_fops_mmap(struct file *filep, struct vm_area_struct *vma)
279 {
280 struct uacce_queue *q = filep->private_data;
281 struct uacce_device *uacce = q->uacce;
282 struct uacce_qfile_region *qfr;
283 enum uacce_qfrt type = UACCE_MAX_REGION;
284 int ret = 0;
285
286 if (vma->vm_pgoff < UACCE_MAX_REGION)
287 type = vma->vm_pgoff;
288 else
289 return -EINVAL;
290
291 qfr = kzalloc(sizeof(*qfr), GFP_KERNEL);
292 if (!qfr)
293 return -ENOMEM;
294
> 295 vma->vm_flags |= VM_DONTCOPY | VM_DONTEXPAND | VM_WIPEONFORK;
296 vma->vm_ops = &uacce_vm_ops;
297 vma->vm_private_data = q;
298 qfr->type = type;
299
300 mutex_lock(&uacce_mutex);
301
302 if (q->state != UACCE_Q_INIT && q->state != UACCE_Q_STARTED) {
303 ret = -EINVAL;
304 goto out_with_lock;
305 }
306
307 if (q->qfrs[type]) {
308 ret = -EEXIST;
309 goto out_with_lock;
310 }
311
312 switch (type) {
313 case UACCE_QFRT_MMIO:
314 if (!uacce->ops->mmap) {
315 ret = -EINVAL;
316 goto out_with_lock;
317 }
318
319 ret = uacce->ops->mmap(q, vma, qfr);
320 if (ret)
321 goto out_with_lock;
322
323 break;
324
325 case UACCE_QFRT_DUS:
326 if (uacce->flags & UACCE_DEV_SVA) {
327 if (!uacce->ops->mmap) {
328 ret = -EINVAL;
329 goto out_with_lock;
330 }
331
332 ret = uacce->ops->mmap(q, vma, qfr);
333 if (ret)
334 goto out_with_lock;
335 }
336 break;
337
338 default:
339 ret = -EINVAL;
340 goto out_with_lock;
341 }
342
343 q->qfrs[type] = qfr;
344 mutex_unlock(&uacce_mutex);
345
346 return ret;
347
348 out_with_lock:
349 mutex_unlock(&uacce_mutex);
350 kfree(qfr);
351 return ret;
352 }
353
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 59358 bytes --]
[-- Attachment #3: Type: text/plain, Size: 156 bytes --]
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
WARNING: multiple messages have this Message-ID (diff)
From: kbuild test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [RESEND PATCH v9 2/4] uacce: add uacce driver
Date: Wed, 11 Dec 2019 08:09:41 +0800 [thread overview]
Message-ID: <201912110600.7K87vvu4%lkp@intel.com> (raw)
In-Reply-To: <1575945755-27380-3-git-send-email-zhangfei.gao@linaro.org>
[-- Attachment #1: Type: text/plain, Size: 13818 bytes --]
Hi Zhangfei,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on cryptodev/master]
[also build test ERROR on crypto/master char-misc/char-misc-testing v5.5-rc1 next-20191210]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Zhangfei-Gao/Add-uacce-module-for-Accelerator/20191210-160210
base: https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master
config: sparc64-allmodconfig (attached as .config)
compiler: sparc64-linux-gcc (GCC) 7.5.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.5.0 make.cross ARCH=sparc64
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/misc/uacce/uacce.c:112:15: error: variable 'uacce_sva_ops' has initializer but incomplete type
static struct iommu_sva_ops uacce_sva_ops = {
^~~~~~~~~~~~~
drivers/misc/uacce/uacce.c:113:3: error: 'struct iommu_sva_ops' has no member named 'mm_exit'
.mm_exit = uacce_sva_exit,
^~~~~~~
drivers/misc/uacce/uacce.c:113:13: warning: excess elements in struct initializer
.mm_exit = uacce_sva_exit,
^~~~~~~~~~~~~~
drivers/misc/uacce/uacce.c:113:13: note: (near initialization for 'uacce_sva_ops')
drivers/misc/uacce/uacce.c: In function 'uacce_mm_get':
drivers/misc/uacce/uacce.c:144:12: error: implicit declaration of function 'iommu_sva_bind_device'; did you mean 'bus_find_device'? [-Werror=implicit-function-declaration]
handle = iommu_sva_bind_device(uacce->parent, mm, uacce_mm);
^~~~~~~~~~~~~~~~~~~~~
bus_find_device
drivers/misc/uacce/uacce.c:144:10: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
handle = iommu_sva_bind_device(uacce->parent, mm, uacce_mm);
^
drivers/misc/uacce/uacce.c:148:9: error: implicit declaration of function 'iommu_sva_set_ops'; did you mean 'iommu_setup_dma_ops'? [-Werror=implicit-function-declaration]
ret = iommu_sva_set_ops(handle, &uacce_sva_ops);
^~~~~~~~~~~~~~~~~
iommu_setup_dma_ops
drivers/misc/uacce/uacce.c:152:21: error: implicit declaration of function 'iommu_sva_get_pasid' [-Werror=implicit-function-declaration]
uacce_mm->pasid = iommu_sva_get_pasid(handle);
^~~~~~~~~~~~~~~~~~~
>> drivers/misc/uacce/uacce.c:153:26: error: 'IOMMU_PASID_INVALID' undeclared (first use in this function); did you mean 'HV_MSIVALID_INVALID'?
if (uacce_mm->pasid == IOMMU_PASID_INVALID)
^~~~~~~~~~~~~~~~~~~
HV_MSIVALID_INVALID
drivers/misc/uacce/uacce.c:153:26: note: each undeclared identifier is reported only once for each function it appears in
drivers/misc/uacce/uacce.c:168:3: error: implicit declaration of function 'iommu_sva_unbind_device'; did you mean 'bus_find_device'? [-Werror=implicit-function-declaration]
iommu_sva_unbind_device(handle);
^~~~~~~~~~~~~~~~~~~~~~~
bus_find_device
drivers/misc/uacce/uacce.c: At top level:
>> drivers/misc/uacce/uacce.c:274:21: error: variable 'uacce_vm_ops' has initializer but incomplete type
static const struct vm_operations_struct uacce_vm_ops = {
^~~~~~~~~~~~~~~~~~~~
>> drivers/misc/uacce/uacce.c:275:3: error: 'const struct vm_operations_struct' has no member named 'close'
.close = uacce_vma_close,
^~~~~
drivers/misc/uacce/uacce.c:275:11: warning: excess elements in struct initializer
.close = uacce_vma_close,
^~~~~~~~~~~~~~~
drivers/misc/uacce/uacce.c:275:11: note: (near initialization for 'uacce_vm_ops')
drivers/misc/uacce/uacce.c: In function 'uacce_fops_mmap':
>> drivers/misc/uacce/uacce.c:295:19: error: 'VM_DONTCOPY' undeclared (first use in this function)
vma->vm_flags |= VM_DONTCOPY | VM_DONTEXPAND | VM_WIPEONFORK;
^~~~~~~~~~~
>> drivers/misc/uacce/uacce.c:295:33: error: 'VM_DONTEXPAND' undeclared (first use in this function); did you mean 'VM_DONTCOPY'?
vma->vm_flags |= VM_DONTCOPY | VM_DONTEXPAND | VM_WIPEONFORK;
^~~~~~~~~~~~~
VM_DONTCOPY
>> drivers/misc/uacce/uacce.c:295:49: error: 'VM_WIPEONFORK' undeclared (first use in this function)
vma->vm_flags |= VM_DONTCOPY | VM_DONTEXPAND | VM_WIPEONFORK;
^~~~~~~~~~~~~
drivers/misc/uacce/uacce.c: In function 'uacce_alloc':
drivers/misc/uacce/uacce.c:502:9: error: implicit declaration of function 'iommu_dev_enable_feature'; did you mean 'module_enable_ro'? [-Werror=implicit-function-declaration]
ret = iommu_dev_enable_feature(parent, IOMMU_DEV_FEAT_SVA);
^~~~~~~~~~~~~~~~~~~~~~~~
module_enable_ro
drivers/misc/uacce/uacce.c:502:42: error: 'IOMMU_DEV_FEAT_SVA' undeclared (first use in this function); did you mean 'NOMMU_VMFLAGS'?
ret = iommu_dev_enable_feature(parent, IOMMU_DEV_FEAT_SVA);
^~~~~~~~~~~~~~~~~~
NOMMU_VMFLAGS
drivers/misc/uacce/uacce.c:530:3: error: implicit declaration of function 'iommu_dev_disable_feature'; did you mean 'module_disable_ro'? [-Werror=implicit-function-declaration]
iommu_dev_disable_feature(uacce->parent, IOMMU_DEV_FEAT_SVA);
^~~~~~~~~~~~~~~~~~~~~~~~~
module_disable_ro
drivers/misc/uacce/uacce.c: In function 'uacce_remove':
drivers/misc/uacce/uacce.c:592:44: error: 'IOMMU_DEV_FEAT_SVA' undeclared (first use in this function); did you mean 'NOMMU_VMFLAGS'?
iommu_dev_disable_feature(uacce->parent, IOMMU_DEV_FEAT_SVA);
^~~~~~~~~~~~~~~~~~
NOMMU_VMFLAGS
drivers/misc/uacce/uacce.c: At top level:
drivers/misc/uacce/uacce.c:112:29: error: storage size of 'uacce_sva_ops' isn't known
static struct iommu_sva_ops uacce_sva_ops = {
^~~~~~~~~~~~~
>> drivers/misc/uacce/uacce.c:274:42: error: storage size of 'uacce_vm_ops' isn't known
static const struct vm_operations_struct uacce_vm_ops = {
^~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +153 drivers/misc/uacce/uacce.c
115
116 static struct uacce_mm *uacce_mm_get(struct uacce_device *uacce,
117 struct uacce_queue *q,
118 struct mm_struct *mm)
119 {
120 struct uacce_mm *uacce_mm = NULL;
121 struct iommu_sva *handle = NULL;
122 int ret;
123
124 lockdep_assert_held(&uacce->mm_lock);
125
126 list_for_each_entry(uacce_mm, &uacce->mm_list, list) {
127 if (uacce_mm->mm == mm) {
128 mutex_lock(&uacce_mm->lock);
129 list_add(&q->list, &uacce_mm->queues);
130 mutex_unlock(&uacce_mm->lock);
131 return uacce_mm;
132 }
133 }
134
135 uacce_mm = kzalloc(sizeof(*uacce_mm), GFP_KERNEL);
136 if (!uacce_mm)
137 return NULL;
138
139 if (uacce->flags & UACCE_DEV_SVA) {
140 /*
141 * Safe to pass an incomplete uacce_mm, since mm_exit cannot
142 * fire while we hold a reference to the mm.
143 */
144 handle = iommu_sva_bind_device(uacce->parent, mm, uacce_mm);
145 if (IS_ERR(handle))
146 goto err_free;
147
> 148 ret = iommu_sva_set_ops(handle, &uacce_sva_ops);
149 if (ret)
150 goto err_unbind;
151
152 uacce_mm->pasid = iommu_sva_get_pasid(handle);
> 153 if (uacce_mm->pasid == IOMMU_PASID_INVALID)
154 goto err_unbind;
155 }
156
157 uacce_mm->mm = mm;
158 uacce_mm->handle = handle;
159 INIT_LIST_HEAD(&uacce_mm->queues);
160 mutex_init(&uacce_mm->lock);
161 list_add(&q->list, &uacce_mm->queues);
162 list_add(&uacce_mm->list, &uacce->mm_list);
163
164 return uacce_mm;
165
166 err_unbind:
167 if (handle)
168 iommu_sva_unbind_device(handle);
169 err_free:
170 kfree(uacce_mm);
171 return NULL;
172 }
173
174 static void uacce_mm_put(struct uacce_queue *q)
175 {
176 struct uacce_mm *uacce_mm = q->uacce_mm;
177
178 lockdep_assert_held(&q->uacce->mm_lock);
179
180 mutex_lock(&uacce_mm->lock);
181 list_del(&q->list);
182 mutex_unlock(&uacce_mm->lock);
183
184 if (list_empty(&uacce_mm->queues)) {
185 if (uacce_mm->handle)
186 iommu_sva_unbind_device(uacce_mm->handle);
187 list_del(&uacce_mm->list);
188 kfree(uacce_mm);
189 }
190 }
191
192 static int uacce_fops_open(struct inode *inode, struct file *filep)
193 {
194 struct uacce_mm *uacce_mm = NULL;
195 struct uacce_device *uacce;
196 struct uacce_queue *q;
197 int ret = 0;
198
199 uacce = xa_load(&uacce_xa, iminor(inode));
200 if (!uacce)
201 return -ENODEV;
202
203 if (!try_module_get(uacce->parent->driver->owner))
204 return -ENODEV;
205
206 q = kzalloc(sizeof(struct uacce_queue), GFP_KERNEL);
207 if (!q) {
208 ret = -ENOMEM;
209 goto out_with_module;
210 }
211
212 mutex_lock(&uacce->mm_lock);
213 uacce_mm = uacce_mm_get(uacce, q, current->mm);
214 mutex_unlock(&uacce->mm_lock);
215 if (!uacce_mm) {
216 ret = -ENOMEM;
217 goto out_with_mem;
218 }
219
220 q->uacce = uacce;
221 q->uacce_mm = uacce_mm;
222
223 if (uacce->ops->get_queue) {
224 ret = uacce->ops->get_queue(uacce, uacce_mm->pasid, q);
225 if (ret < 0)
226 goto out_with_mm;
227 }
228
229 init_waitqueue_head(&q->wait);
230 filep->private_data = q;
231 q->state = UACCE_Q_INIT;
232
233 return 0;
234
235 out_with_mm:
236 mutex_lock(&uacce->mm_lock);
237 uacce_mm_put(q);
238 mutex_unlock(&uacce->mm_lock);
239 out_with_mem:
240 kfree(q);
241 out_with_module:
242 module_put(uacce->parent->driver->owner);
243 return ret;
244 }
245
246 static int uacce_fops_release(struct inode *inode, struct file *filep)
247 {
248 struct uacce_queue *q = filep->private_data;
249 struct uacce_device *uacce = q->uacce;
250
251 uacce_put_queue(q);
252
253 mutex_lock(&uacce->mm_lock);
254 uacce_mm_put(q);
255 mutex_unlock(&uacce->mm_lock);
256
257 kfree(q);
258 module_put(uacce->parent->driver->owner);
259
260 return 0;
261 }
262
263 static void uacce_vma_close(struct vm_area_struct *vma)
264 {
265 struct uacce_queue *q = vma->vm_private_data;
266 struct uacce_qfile_region *qfr = NULL;
267
268 if (vma->vm_pgoff < UACCE_MAX_REGION)
269 qfr = q->qfrs[vma->vm_pgoff];
270
271 kfree(qfr);
272 }
273
> 274 static const struct vm_operations_struct uacce_vm_ops = {
> 275 .close = uacce_vma_close,
276 };
277
278 static int uacce_fops_mmap(struct file *filep, struct vm_area_struct *vma)
279 {
280 struct uacce_queue *q = filep->private_data;
281 struct uacce_device *uacce = q->uacce;
282 struct uacce_qfile_region *qfr;
283 enum uacce_qfrt type = UACCE_MAX_REGION;
284 int ret = 0;
285
286 if (vma->vm_pgoff < UACCE_MAX_REGION)
287 type = vma->vm_pgoff;
288 else
289 return -EINVAL;
290
291 qfr = kzalloc(sizeof(*qfr), GFP_KERNEL);
292 if (!qfr)
293 return -ENOMEM;
294
> 295 vma->vm_flags |= VM_DONTCOPY | VM_DONTEXPAND | VM_WIPEONFORK;
296 vma->vm_ops = &uacce_vm_ops;
297 vma->vm_private_data = q;
298 qfr->type = type;
299
300 mutex_lock(&uacce_mutex);
301
302 if (q->state != UACCE_Q_INIT && q->state != UACCE_Q_STARTED) {
303 ret = -EINVAL;
304 goto out_with_lock;
305 }
306
307 if (q->qfrs[type]) {
308 ret = -EEXIST;
309 goto out_with_lock;
310 }
311
312 switch (type) {
313 case UACCE_QFRT_MMIO:
314 if (!uacce->ops->mmap) {
315 ret = -EINVAL;
316 goto out_with_lock;
317 }
318
319 ret = uacce->ops->mmap(q, vma, qfr);
320 if (ret)
321 goto out_with_lock;
322
323 break;
324
325 case UACCE_QFRT_DUS:
326 if (uacce->flags & UACCE_DEV_SVA) {
327 if (!uacce->ops->mmap) {
328 ret = -EINVAL;
329 goto out_with_lock;
330 }
331
332 ret = uacce->ops->mmap(q, vma, qfr);
333 if (ret)
334 goto out_with_lock;
335 }
336 break;
337
338 default:
339 ret = -EINVAL;
340 goto out_with_lock;
341 }
342
343 q->qfrs[type] = qfr;
344 mutex_unlock(&uacce_mutex);
345
346 return ret;
347
348 out_with_lock:
349 mutex_unlock(&uacce_mutex);
350 kfree(qfr);
351 return ret;
352 }
353
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org Intel Corporation
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 59358 bytes --]
next prev parent reply other threads:[~2019-12-11 0:10 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-10 2:42 [RESEND PATCH v9 0/4] Add uacce module for Accelerator Zhangfei Gao
2019-12-10 2:42 ` Zhangfei Gao
2019-12-10 2:42 ` [RESEND PATCH v9 1/4] uacce: Add documents for uacce Zhangfei Gao
2019-12-10 2:42 ` Zhangfei Gao
2019-12-10 2:42 ` [RESEND PATCH v9 2/4] uacce: add uacce driver Zhangfei Gao
2019-12-10 2:42 ` Zhangfei Gao
2019-12-10 11:26 ` kbuild test robot
2019-12-10 11:26 ` kbuild test robot
2019-12-10 11:26 ` kbuild test robot
2019-12-11 0:09 ` kbuild test robot [this message]
2019-12-11 0:09 ` kbuild test robot
2019-12-11 0:09 ` kbuild test robot
2019-12-11 5:50 ` zhangfei
2019-12-11 5:50 ` zhangfei
2019-12-11 5:50 ` zhangfei
2019-12-10 2:42 ` [RESEND PATCH v9 3/4] crypto: hisilicon - Remove module_param uacce_mode Zhangfei Gao
2019-12-10 2:42 ` Zhangfei Gao
2019-12-10 2:42 ` [RESEND PATCH v9 4/4] crypto: hisilicon - register zip engine to uacce Zhangfei Gao
2019-12-10 2:42 ` Zhangfei Gao
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=201912110600.7K87vvu4%lkp@intel.com \
--to=lkp@intel.com \
--cc=arnd@arndb.de \
--cc=francois.ozog@linaro.org \
--cc=grant.likely@arm.com \
--cc=gregkh@linuxfoundation.org \
--cc=guodong.xu@linaro.org \
--cc=haojian.zhuang@linaro.org \
--cc=herbert@gondor.apana.org.au \
--cc=ilias.apalodimas@linaro.org \
--cc=iommu@lists.linux-foundation.org \
--cc=jean-philippe@linaro.org \
--cc=jglisse@redhat.com \
--cc=jonathan.cameron@huawei.com \
--cc=kbuild-all@lists.01.org \
--cc=kenneth-lee-2012@foxmail.com \
--cc=liguozhu@hisilicon.com \
--cc=linux-accelerators@lists.ozlabs.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=wangzhou1@hisilicon.com \
--cc=xuzaibo@huawei.com \
--cc=zhangfei.gao@linaro.org \
/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.