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 --]
next prev 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.