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.9-rc6 next-20200924]
[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/Fix-some-bugs-of-the-vop-driver-and-mpssd-user-space-tool/20200925-152356
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git 
9eb29f2ed95edda511ce28651b1d7cdef3614c12
config: ia64-randconfig-s032-20200925 (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.0
reproduce:
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.2-201-g24bdaac6-dirty
        # 
https://github.com/0day-ci/linux/commit/5f4b5ded8447941d43166eba5d303cdca2e54f07
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review 
Sherry-Sun/Fix-some-bugs-of-the-vop-driver-and-mpssd-user-space-tool/20200925-152356
        git checkout 5f4b5ded8447941d43166eba5d303cdca2e54f07
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 
CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=ia64 

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_vringh.c:666:22: sparse: sparse: incorrect type in 
>> argument 1 (different address spaces) @@     expected void volatile 
>> [noderef] __iomem *dst @@     got void * @@
>> drivers/misc/mic/vop/vop_vringh.c:666:22: sparse:     expected void volatile 
>> [noderef] __iomem *dst
   drivers/misc/mic/vop/vop_vringh.c:666:22: sparse:     got void *

vim +666 drivers/misc/mic/vop/vop_vringh.c

   585  
   586  /*
   587   * Initiates copies across the PCIe bus from a user space buffer to card
   588   * memory. When transfers are done using DMA, source/destination 
addresses
   589   * and transfer length must follow the alignment requirements of the MIC
   590   * DMA engine.
   591   */
   592  static int vop_virtio_copy_from_user(struct vop_vdev *vdev, void __user 
*ubuf,
   593                                       size_t len, u64 daddr, size_t dlen,
   594                                       int vr_idx)
   595  {
   596          struct vop_device *vpdev = vdev->vpdev;
   597          void __iomem *dbuf = vpdev->hw_ops->remap(vpdev, daddr, len);
   598          struct vop_vringh *vvr = &vdev->vvr[vr_idx];
   599          struct vop_info *vi = dev_get_drvdata(&vdev->vpdev->dev);
   600          size_t dma_alignment;
   601          bool x200;
   602          size_t partlen;
   603          bool dma = VOP_USE_DMA && vi->dma_ch;
   604          int err = 0;
   605          void *temp = NULL;
   606  
   607          if (dma) {
   608                  dma_alignment = 1 << vi->dma_ch->device->copy_align;
   609                  x200 = is_dma_copy_aligned(vi->dma_ch->device, 1, 1, 1);
   610  
   611                  if (daddr & (dma_alignment - 1)) {
   612                          vdev->tx_dst_unaligned += len;
   613                          dma = false;
   614                  } else if (ALIGN(len, dma_alignment) > dlen) {
   615                          vdev->tx_len_unaligned += len;
   616                          dma = false;
   617                  }
   618          }
   619  
   620          if (!dma)
   621                  goto memcpy;
   622  
   623          /*
   624           * X100 uses DMA addresses as seen by the card so adding
   625           * the aperture base is not required for DMA. However x200
   626           * requires DMA addresses to be an offset into the bar so
   627           * add the aperture base for x200.
   628           */
   629          if (x200)
   630                  daddr += vpdev->aper->pa;
   631          while (len) {
   632                  partlen = min_t(size_t, len, VOP_INT_DMA_BUF_SIZE);
   633  
   634                  if (copy_from_user(vvr->buf, ubuf, partlen)) {
   635                          err = -EFAULT;
   636                          dev_err(vop_dev(vdev), "%s %d err %d\n",
   637                                  __func__, __LINE__, err);
   638                          goto err;
   639                  }
   640                  err = vop_sync_dma(vdev, daddr, vvr->buf_da,
   641                                     ALIGN(partlen, dma_alignment));
   642                  if (err) {
   643                          dev_err(vop_dev(vdev), "%s %d err %d\n",
   644                                  __func__, __LINE__, err);
   645                          goto err;
   646                  }
   647                  daddr += partlen;
   648                  ubuf += partlen;
   649                  dbuf += partlen;
   650                  vdev->out_bytes_dma += partlen;
   651                  vdev->out_bytes += partlen;
   652                  len -= partlen;
   653          }
   654  memcpy:
   655          /*
   656           * We are copying to IO below and should ideally use something
   657           * like copy_from_user_toio(..) if it existed.
   658           */
   659          temp = kmalloc(len, GFP_KERNEL);
   660          if (copy_from_user(temp, ubuf, len)) {
   661                  err = -EFAULT;
   662                  dev_err(vop_dev(vdev), "%s %d err %d\n",
   663                          __func__, __LINE__, err);
   664                  goto err;
   665          }
 > 666          memcpy_toio((void __force *)dbuf, temp, len);
   667          kfree(temp);
   668          vdev->out_bytes += len;
   669          err = 0;
   670  err:
   671          vpdev->hw_ops->unmap(vpdev, dbuf);
   672          dev_dbg(vop_dev(vdev),
   673                  "%s: ubuf %p dbuf %p len 0x%zx vr_idx 0x%x\n",
   674                  __func__, ubuf, dbuf, len, vr_idx);
   675          return err;
   676  }
   677  

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