Re: [PATCH V4 2/2] misc: vop: do not allocate and reassign the used ring

From: kernel test robot
Date: Mon Oct 26 2020 - 06:38:24 EST


Hi Sherry,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on char-misc/char-misc-testing]
[also build test WARNING on soc/for-next linus/master v5.10-rc1 next-20201026]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/Sherry-Sun/Change-vring-space-from-nomal-memory-to-dma-coherent-memory/20201026-170616
base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git 726eb70e0d34dc4bc4dada71f52bba8ed638431e
config: i386-randconfig-s001-20201026 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.3-56-gc09e8239-dirty
# https://github.com/0day-ci/linux/commit/9ec4633ad59551e4780046500b368eb7993588f3
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Sherry-Sun/Change-vring-space-from-nomal-memory-to-dma-coherent-memory/20201026-170616
git checkout 9ec4633ad59551e4780046500b368eb7993588f3
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386

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


"sparse warnings: (new ones prefixed by >>)"
>> drivers/misc/mic/vop/vop_main.c:339:17: sparse: sparse: cast removes address space '__iomem' of expression

vim +/__iomem +339 drivers/misc/mic/vop/vop_main.c

289
290 /*
291 * This routine will assign vring's allocated in host/io memory. Code in
292 * virtio_ring.c however continues to access this io memory as if it were local
293 * memory without io accessors.
294 */
295 static struct virtqueue *vop_find_vq(struct virtio_device *dev,
296 unsigned index,
297 void (*callback)(struct virtqueue *vq),
298 const char *name, bool ctx)
299 {
300 struct _vop_vdev *vdev = to_vopvdev(dev);
301 struct vop_device *vpdev = vdev->vpdev;
302 struct mic_vqconfig __iomem *vqconfig;
303 struct mic_vqconfig config;
304 struct virtqueue *vq;
305 void __iomem *va;
306 struct _mic_vring_info __iomem *info;
307 void *used;
308 int vr_size, _vr_size, err, magic;
309 u8 type = ioread8(&vdev->desc->type);
310
311 if (index >= ioread8(&vdev->desc->num_vq))
312 return ERR_PTR(-ENOENT);
313
314 if (!name)
315 return ERR_PTR(-ENOENT);
316
317 /* First assign the vring's allocated in host memory */
318 vqconfig = _vop_vq_config(vdev->desc) + index;
319 memcpy_fromio(&config, vqconfig, sizeof(config));
320 _vr_size = round_up(vring_size(le16_to_cpu(config.num), MIC_VIRTIO_RING_ALIGN), 4);
321 vr_size = PAGE_ALIGN(_vr_size + sizeof(struct _mic_vring_info));
322 va = vpdev->hw_ops->remap(vpdev, le64_to_cpu(config.address), vr_size);
323 if (!va)
324 return ERR_PTR(-ENOMEM);
325 vdev->vr[index] = va;
326 memset_io(va, 0x0, _vr_size);
327
328 info = va + _vr_size;
329 magic = ioread32(&info->magic);
330
331 if (WARN(magic != MIC_MAGIC + type + index, "magic mismatch")) {
332 err = -EIO;
333 goto unmap;
334 }
335
336 vdev->used_size[index] = PAGE_ALIGN(sizeof(__u16) * 3 +
337 sizeof(struct vring_used_elem) *
338 le16_to_cpu(config.num));
> 339 used = (void *)va + PAGE_ALIGN(sizeof(struct vring_desc) *
340 le16_to_cpu(config.num) + sizeof(__u16) *
341 (3 + le16_to_cpu(config.num)));
342 vdev->used_virt[index] = used;
343 if (!used) {
344 err = -ENOMEM;
345 dev_err(_vop_dev(vdev), "%s %d err %d\n",
346 __func__, __LINE__, err);
347 goto unmap;
348 }
349
350 vq = vop_new_virtqueue(index, le16_to_cpu(config.num), dev, ctx,
351 (void __force *)va, vop_notify, callback,
352 name, used);
353 if (!vq) {
354 err = -ENOMEM;
355 goto unmap;
356 }
357
358 vdev->used[index] = le64_to_cpu(config.address) +
359 PAGE_ALIGN(sizeof(struct vring_desc) *
360 le16_to_cpu(config.num) + sizeof(__u16) *
361 (3 + le16_to_cpu(config.num)));
362 writeq(vdev->used[index], &vqconfig->used_address);
363
364 vq->priv = vdev;
365 return vq;
366 unmap:
367 vpdev->hw_ops->unmap(vpdev, vdev->vr[index]);
368 return ERR_PTR(err);
369 }
370

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

Attachment: .config.gz
Description: application/gzip