[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <202203160614.sjUMuSy8-lkp@intel.com>
Date: Wed, 16 Mar 2022 06:47:53 +0800
From: kernel test robot <lkp@...el.com>
To: Arnaud Pouliquen <arnaud.pouliquen@...s.st.com>,
Bjorn Andersson <bjorn.andersson@...aro.org>,
Mathieu Poirier <mathieu.poirier@...aro.org>
Cc: kbuild-all@...ts.01.org, linux-remoteproc@...r.kernel.org,
linux-kernel@...r.kernel.org,
linux-stm32@...md-mailman.stormreply.com,
arnaud.pouliquen@...s.st.com
Subject: Re: [PATCH] rpmsg: virtio: set dst address on first message received
Hi Arnaud,
I love your patch! Perhaps something to improve:
[auto build test WARNING on remoteproc/rpmsg-next]
[also build test WARNING on v5.17-rc8 next-20220315]
[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/Arnaud-Pouliquen/rpmsg-virtio-set-dst-address-on-first-message-received/20220315-234049
base: git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux.git rpmsg-next
config: s390-randconfig-s031-20220313 (https://download.01.org/0day-ci/archive/20220316/202203160614.sjUMuSy8-lkp@intel.com/config)
compiler: s390-linux-gcc (GCC) 11.2.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.4-dirty
# https://github.com/0day-ci/linux/commit/ef182a34773917f6bf876b37485031962393a1cd
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Arnaud-Pouliquen/rpmsg-virtio-set-dst-address-on-first-message-received/20220315-234049
git checkout ef182a34773917f6bf876b37485031962393a1cd
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=s390 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@...el.com>
sparse warnings: (new ones prefixed by >>)
>> drivers/rpmsg/virtio_rpmsg_bus.c:756:36: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] dst @@ got restricted __rpmsg32 [usertype] src @@
drivers/rpmsg/virtio_rpmsg_bus.c:756:36: sparse: expected unsigned int [usertype] dst
drivers/rpmsg/virtio_rpmsg_bus.c:756:36: sparse: got restricted __rpmsg32 [usertype] src
vim +756 drivers/rpmsg/virtio_rpmsg_bus.c
727
728 /*
729 * We currently use fixed-sized buffers, so trivially sanitize
730 * the reported payload length.
731 */
732 if (len > vrp->buf_size ||
733 msg_len > (len - sizeof(struct rpmsg_hdr))) {
734 dev_warn(dev, "inbound msg too big: (%d, %d)\n", len, msg_len);
735 return -EINVAL;
736 }
737
738 /* use the dst addr to fetch the callback of the appropriate user */
739 mutex_lock(&vrp->endpoints_lock);
740
741 ept = idr_find(&vrp->endpoints, __rpmsg32_to_cpu(little_endian, msg->dst));
742
743 /* let's make sure no one deallocates ept while we use it */
744 if (ept)
745 kref_get(&ept->refcount);
746
747 mutex_unlock(&vrp->endpoints_lock);
748
749 if (ept) {
750 rpdev = ept->rpdev;
751 if (rpdev->ept == ept && rpdev->dst == RPMSG_ADDR_ANY) {
752 /*
753 * First message received from the remote side on the default endpoint,
754 * update channel destination address.
755 */
> 756 rpdev->dst = msg->src;
757 }
758
759 /* make sure ept->cb doesn't go away while we use it */
760 mutex_lock(&ept->cb_lock);
761
762 if (ept->cb)
763 ept->cb(ept->rpdev, msg->data, msg_len, ept->priv,
764 __rpmsg32_to_cpu(little_endian, msg->src));
765
766 mutex_unlock(&ept->cb_lock);
767
768 /* farewell, ept, we don't need you anymore */
769 kref_put(&ept->refcount, __ept_release);
770 } else
771 dev_warn_ratelimited(dev, "msg received with no recipient\n");
772
773 /* publish the real size of the buffer */
774 rpmsg_sg_init(&sg, msg, vrp->buf_size);
775
776 /* add the buffer back to the remote processor's virtqueue */
777 err = virtqueue_add_inbuf(vrp->rvq, &sg, 1, msg, GFP_KERNEL);
778 if (err < 0) {
779 dev_err(dev, "failed to add a virtqueue buffer: %d\n", err);
780 return err;
781 }
782
783 return 0;
784 }
785
---
0-DAY CI Kernel Test Service
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Powered by blists - more mailing lists