All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH 4/4] mic: vop: copy data to kernel space then write to io memory
Date: Fri, 25 Sep 2020 19:03:22 +0800	[thread overview]
Message-ID: <202009251845.dD92jo6b%lkp@intel.com> (raw)
In-Reply-To: <20200925071831.8025-5-sherry.sun@nxp.com>

[-- Attachment #1: Type: text/plain, Size: 5442 bytes --]

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 <lkp@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-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 29373 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Sherry Sun <sherry.sun@nxp.com>,
	sudeep.dutt@intel.com, ashutosh.dixit@intel.com, arnd@arndb.de,
	gregkh@linuxfoundation.org, rikard.falkeborn@gmail.com,
	lee.jones@linaro.org, mst@redhat.com
Cc: kbuild-all@lists.01.org, linux-kernel@vger.kernel.org, linux-imx@nxp.com
Subject: Re: [PATCH 4/4] mic: vop: copy data to kernel space then write to io memory
Date: Fri, 25 Sep 2020 19:03:22 +0800	[thread overview]
Message-ID: <202009251845.dD92jo6b%lkp@intel.com> (raw)
In-Reply-To: <20200925071831.8025-5-sherry.sun@nxp.com>

[-- Attachment #1: Type: text/plain, Size: 5305 bytes --]

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

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 29373 bytes --]

  parent reply	other threads:[~2020-09-25 11:03 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-25  7:18 [PATCH 0/4] Fix some bugs of the vop driver and mpssd user space tool Sherry Sun
2020-09-25  7:18 ` [PATCH 1/4] samples: mpssd: fix the build errors when enable DEBUG in mpssd.c Sherry Sun
2020-09-25  7:18 ` [PATCH 2/4] misc: vop: build VOP based on CONFIG_VOP Sherry Sun
2020-09-25  7:18 ` [PATCH 3/4] misc: vop: add round_up(x,4) for vring_size to avoid kernel panic Sherry Sun
2020-09-25  7:18 ` [PATCH 4/4] mic: vop: copy data to kernel space then write to io memory Sherry Sun
2020-09-25  7:32   ` Arnd Bergmann
2020-09-25  7:50     ` Sherry Sun
2020-09-25 10:55   ` kernel test robot
2020-09-25 10:55     ` kernel test robot
2020-09-25 11:03   ` kernel test robot [this message]
2020-09-25 11:03     ` kernel test robot
2020-09-26  3:58   ` kernel test robot

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=202009251845.dD92jo6b%lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.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.