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 <l...@intel.com>


"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-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to