Re: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support
On Mon, 20 Mar 2023 14:54:51 +0300, Viktor Prutyanov wrote: > According to VirtIO spec v1.2, VIRTIO_F_NOTIFICATION_DATA feature > indicates that the driver passes extra data along with the queue > notifications. > > In a split queue case, the extra data is 16-bit available index. In a > packed queue case, the extra data is 1-bit wrap counter and 15-bit > available index. > > Add support for this feature for both MMIO and PCI. > > Signed-off-by: Viktor Prutyanov > --- > drivers/virtio/virtio_mmio.c | 15 ++- > drivers/virtio/virtio_pci_common.c | 10 ++ > drivers/virtio/virtio_pci_common.h | 4 > drivers/virtio/virtio_pci_legacy.c | 2 +- > drivers/virtio/virtio_pci_modern.c | 2 +- > drivers/virtio/virtio_ring.c | 17 + > include/linux/virtio_ring.h| 2 ++ > include/uapi/linux/virtio_config.h | 6 ++ > 8 files changed, 55 insertions(+), 3 deletions(-) > > diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c > index 3ff746e3f24a..05da5ad7fc93 100644 > --- a/drivers/virtio/virtio_mmio.c > +++ b/drivers/virtio/virtio_mmio.c > @@ -285,6 +285,19 @@ static bool vm_notify(struct virtqueue *vq) > return true; > } > > +static bool vm_notify_with_data(struct virtqueue *vq) > +{ > + struct virtio_mmio_device *vm_dev = to_virtio_mmio_device(vq->vdev); > + __le32 data = vring_fill_notification_data(vq); > + > + writel(data, vm_dev->base + VIRTIO_MMIO_QUEUE_NOTIFY); > + > + return true; > +} > + > +#define VM_NOTIFY(vdev) (__virtio_test_bit((vdev), > VIRTIO_F_NOTIFICATION_DATA) \ > + ? vm_notify_with_data : vm_notify) Is this macro necessary, it is only used once. And I don't recognize that this logic is necessary to use macro. > + > /* Notify all virtqueues on an interrupt. */ > static irqreturn_t vm_interrupt(int irq, void *opaque) > { > @@ -397,7 +410,7 @@ static struct virtqueue *vm_setup_vq(struct virtio_device > *vdev, unsigned int in > > /* Create the vring */ > vq = vring_create_virtqueue(index, num, VIRTIO_MMIO_VRING_ALIGN, vdev, > - true, true, ctx, vm_notify, callback, name); > + true, true, ctx, VM_NOTIFY(vdev), callback, name); > if (!vq) { > err = -ENOMEM; > goto error_new_virtqueue; > diff --git a/drivers/virtio/virtio_pci_common.c > b/drivers/virtio/virtio_pci_common.c > index a6c86f916dbd..bf7daad9ce65 100644 > --- a/drivers/virtio/virtio_pci_common.c > +++ b/drivers/virtio/virtio_pci_common.c > @@ -43,6 +43,16 @@ bool vp_notify(struct virtqueue *vq) > /* we write the queue's selector into the notification register to >* signal the other end */ > iowrite16(vq->index, (void __iomem *)vq->priv); > + > + return true; > +} > + > +bool vp_notify_with_data(struct virtqueue *vq) > +{ > + __le32 data = vring_fill_notification_data(vq); > + > + iowrite32(data, (void __iomem *)vq->priv); > + > return true; > } > > diff --git a/drivers/virtio/virtio_pci_common.h > b/drivers/virtio/virtio_pci_common.h > index 23112d84218f..9a7212dcbb32 100644 > --- a/drivers/virtio/virtio_pci_common.h > +++ b/drivers/virtio/virtio_pci_common.h > @@ -105,6 +105,7 @@ static struct virtio_pci_device *to_vp_device(struct > virtio_device *vdev) > void vp_synchronize_vectors(struct virtio_device *vdev); > /* the notify function used when creating a virt queue */ > bool vp_notify(struct virtqueue *vq); > +bool vp_notify_with_data(struct virtqueue *vq); > /* the config->del_vqs() implementation */ > void vp_del_vqs(struct virtio_device *vdev); > /* the config->find_vqs() implementation */ > @@ -114,6 +115,9 @@ int vp_find_vqs(struct virtio_device *vdev, unsigned int > nvqs, > struct irq_affinity *desc); > const char *vp_bus_name(struct virtio_device *vdev); > > +#define VP_NOTIFY(vdev) (__virtio_test_bit((vdev), > VIRTIO_F_NOTIFICATION_DATA) \ > + ? vp_notify : vp_notify_with_data) > + I also think that this is not necessary, although it has been used twice. > /* Setup the affinity for a virtqueue: > * - force the affinity for per vq vector > * - OR over all affinities for shared MSI > diff --git a/drivers/virtio/virtio_pci_legacy.c > b/drivers/virtio/virtio_pci_legacy.c > index 2257f1b3d8ae..b98e994cae48 100644 > --- a/drivers/virtio/virtio_pci_legacy.c > +++ b/drivers/virtio/virtio_pci_legacy.c > @@ -131,7 +131,7 @@ static struct virtqueue *setup_vq(struct > virtio_pci_device *vp_dev, > vq = vring_create_virtqueue(index, num, > VIRTIO_PCI_VRING_ALIGN, _dev->vdev, > true, false, ctx, > - vp_notify, callback, name); > + VP_NOTIFY(_dev->vdev), callback, name); > if (!vq) > return ERR_PTR(-ENOMEM); > > diff --git a/drivers/virtio/virtio_pci_modern.c > b/drivers/virtio/virtio_pci_modern.c
Re: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support
Hi Viktor, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on mst-vhost/linux-next] [also build test WARNING on linus/master v6.3-rc3 next-20230320] [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#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Viktor-Prutyanov/virtio-add-VIRTIO_F_NOTIFICATION_DATA-feature-support/20230320-195725 base: https://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git linux-next patch link: https://lore.kernel.org/r/20230320115451.1232171-1-viktor%40daynix.com patch subject: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support config: sparc64-randconfig-s031-20230319 (https://download.01.org/0day-ci/archive/20230321/202303210740.w7riuizb-...@intel.com/config) compiler: sparc64-linux-gcc (GCC) 12.1.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-39-gce1a6720-dirty # https://github.com/intel-lab-lkp/linux/commit/b6212a12ca1691dc346e5de046ec46bd3ce11247 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Viktor-Prutyanov/virtio-add-VIRTIO_F_NOTIFICATION_DATA-feature-support/20230320-195725 git checkout b6212a12ca1691dc346e5de046ec46bd3ce11247 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sparc64 olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sparc64 SHELL=/bin/bash drivers/virtio/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot | Link: https://lore.kernel.org/oe-kbuild-all/202303210740.w7riuizb-...@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/virtio/virtio_pci_common.c:54:19: sparse: sparse: incorrect type in >> argument 1 (different base types) @@ expected unsigned int [usertype] l >> @@ got restricted __le32 [usertype] data @@ drivers/virtio/virtio_pci_common.c:54:19: sparse: expected unsigned int [usertype] l drivers/virtio/virtio_pci_common.c:54:19: sparse: got restricted __le32 [usertype] data vim +54 drivers/virtio/virtio_pci_common.c 49 50 bool vp_notify_with_data(struct virtqueue *vq) 51 { 52 __le32 data = vring_fill_notification_data(vq); 53 > 54 iowrite32(data, (void __iomem *)vq->priv); 55 56 return true; 57 } 58 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests ___ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Re: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support
Hi Viktor, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on mst-vhost/linux-next] [also build test WARNING on linus/master v6.3-rc3 next-20230320] [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#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Viktor-Prutyanov/virtio-add-VIRTIO_F_NOTIFICATION_DATA-feature-support/20230320-195725 base: https://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git linux-next patch link: https://lore.kernel.org/r/20230320115451.1232171-1-viktor%40daynix.com patch subject: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support config: alpha-randconfig-s043-20230319 (https://download.01.org/0day-ci/archive/20230321/202303210759.krnnnzb4-...@intel.com/config) compiler: alpha-linux-gcc (GCC) 12.1.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-39-gce1a6720-dirty # https://github.com/intel-lab-lkp/linux/commit/b6212a12ca1691dc346e5de046ec46bd3ce11247 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Viktor-Prutyanov/virtio-add-VIRTIO_F_NOTIFICATION_DATA-feature-support/20230320-195725 git checkout b6212a12ca1691dc346e5de046ec46bd3ce11247 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=alpha olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=alpha SHELL=/bin/bash drivers/virtio/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot | Link: https://lore.kernel.org/oe-kbuild-all/202303210759.krnnnzb4-...@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/virtio/virtio_mmio.c:293:16: sparse: sparse: incorrect type in >> argument 1 (different base types) @@ expected unsigned int [usertype] b >> @@ got restricted __le32 [usertype] data @@ drivers/virtio/virtio_mmio.c:293:16: sparse: expected unsigned int [usertype] b drivers/virtio/virtio_mmio.c:293:16: sparse: got restricted __le32 [usertype] data vim +293 drivers/virtio/virtio_mmio.c 287 288 static bool vm_notify_with_data(struct virtqueue *vq) 289 { 290 struct virtio_mmio_device *vm_dev = to_virtio_mmio_device(vq->vdev); 291 __le32 data = vring_fill_notification_data(vq); 292 > 293 writel(data, vm_dev->base + VIRTIO_MMIO_QUEUE_NOTIFY); 294 295 return true; 296 } 297 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests ___ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Re: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support
Hi Viktor, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on mst-vhost/linux-next] [also build test WARNING on linus/master v6.3-rc3 next-20230320] [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#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Viktor-Prutyanov/virtio-add-VIRTIO_F_NOTIFICATION_DATA-feature-support/20230320-195725 base: https://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git linux-next patch link: https://lore.kernel.org/r/20230320115451.1232171-1-viktor%40daynix.com patch subject: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support config: i386-randconfig-s002 (https://download.01.org/0day-ci/archive/20230321/202303210515.zhhe1nmc-...@intel.com/config) compiler: gcc-11 (Debian 11.3.0-8) 11.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.4-39-gce1a6720-dirty # https://github.com/intel-lab-lkp/linux/commit/b6212a12ca1691dc346e5de046ec46bd3ce11247 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Viktor-Prutyanov/virtio-add-VIRTIO_F_NOTIFICATION_DATA-feature-support/20230320-195725 git checkout b6212a12ca1691dc346e5de046ec46bd3ce11247 # save the config file mkdir build_dir && cp config build_dir/.config make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 olddefconfig make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash drivers/virtio/ net/bluetooth/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot | Link: https://lore.kernel.org/oe-kbuild-all/202303210515.zhhe1nmc-...@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/virtio/virtio_pci_common.c:54:19: sparse: sparse: incorrect type in >> argument 1 (different base types) @@ expected unsigned int [usertype] @@ >> got restricted __le32 [usertype] data @@ drivers/virtio/virtio_pci_common.c:54:19: sparse: expected unsigned int [usertype] drivers/virtio/virtio_pci_common.c:54:19: sparse: got restricted __le32 [usertype] data vim +54 drivers/virtio/virtio_pci_common.c 49 50 bool vp_notify_with_data(struct virtqueue *vq) 51 { 52 __le32 data = vring_fill_notification_data(vq); 53 > 54 iowrite32(data, (void __iomem *)vq->priv); 55 56 return true; 57 } 58 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests ___ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Re: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support
Hi Viktor, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on mst-vhost/linux-next] [also build test WARNING on linus/master v6.3-rc3 next-20230320] [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#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Viktor-Prutyanov/virtio-add-VIRTIO_F_NOTIFICATION_DATA-feature-support/20230320-195725 base: https://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git linux-next patch link: https://lore.kernel.org/r/20230320115451.1232171-1-viktor%40daynix.com patch subject: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support config: loongarch-randconfig-s032-20230319 (https://download.01.org/0day-ci/archive/20230321/202303210441.xoa05pbs-...@intel.com/config) compiler: loongarch64-linux-gcc (GCC) 12.1.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-39-gce1a6720-dirty # https://github.com/intel-lab-lkp/linux/commit/b6212a12ca1691dc346e5de046ec46bd3ce11247 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Viktor-Prutyanov/virtio-add-VIRTIO_F_NOTIFICATION_DATA-feature-support/20230320-195725 git checkout b6212a12ca1691dc346e5de046ec46bd3ce11247 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=loongarch olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=loongarch SHELL=/bin/bash drivers/virtio/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot | Link: https://lore.kernel.org/oe-kbuild-all/202303210441.xoa05pbs-...@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/virtio/virtio_pci_common.c:54:19: sparse: sparse: incorrect type in >> argument 1 (different base types) @@ expected unsigned int [usertype] >> value @@ got restricted __le32 [usertype] data @@ drivers/virtio/virtio_pci_common.c:54:19: sparse: expected unsigned int [usertype] value drivers/virtio/virtio_pci_common.c:54:19: sparse: got restricted __le32 [usertype] data vim +54 drivers/virtio/virtio_pci_common.c 49 50 bool vp_notify_with_data(struct virtqueue *vq) 51 { 52 __le32 data = vring_fill_notification_data(vq); 53 > 54 iowrite32(data, (void __iomem *)vq->priv); 55 56 return true; 57 } 58 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests ___ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Re: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support
Hi Viktor, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on mst-vhost/linux-next] [also build test WARNING on linus/master v6.3-rc3 next-20230320] [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#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Viktor-Prutyanov/virtio-add-VIRTIO_F_NOTIFICATION_DATA-feature-support/20230320-195725 base: https://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git linux-next patch link: https://lore.kernel.org/r/20230320115451.1232171-1-viktor%40daynix.com patch subject: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support config: sparc64-randconfig-s052-20230319 (https://download.01.org/0day-ci/archive/20230321/202303210405.8gkuvbfx-...@intel.com/config) compiler: sparc64-linux-gcc (GCC) 12.1.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-39-gce1a6720-dirty # https://github.com/intel-lab-lkp/linux/commit/b6212a12ca1691dc346e5de046ec46bd3ce11247 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Viktor-Prutyanov/virtio-add-VIRTIO_F_NOTIFICATION_DATA-feature-support/20230320-195725 git checkout b6212a12ca1691dc346e5de046ec46bd3ce11247 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sparc64 olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sparc64 SHELL=/bin/bash drivers/virtio/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot | Link: https://lore.kernel.org/oe-kbuild-all/202303210405.8gkuvbfx-...@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/virtio/virtio_mmio.c:293:16: sparse: sparse: incorrect type in >> argument 1 (different base types) @@ expected unsigned int [usertype] l >> @@ got restricted __le32 [usertype] data @@ drivers/virtio/virtio_mmio.c:293:16: sparse: expected unsigned int [usertype] l drivers/virtio/virtio_mmio.c:293:16: sparse: got restricted __le32 [usertype] data vim +293 drivers/virtio/virtio_mmio.c 287 288 static bool vm_notify_with_data(struct virtqueue *vq) 289 { 290 struct virtio_mmio_device *vm_dev = to_virtio_mmio_device(vq->vdev); 291 __le32 data = vring_fill_notification_data(vq); 292 > 293 writel(data, vm_dev->base + VIRTIO_MMIO_QUEUE_NOTIFY); 294 295 return true; 296 } 297 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests ___ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Re: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support
Hi Viktor, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on mst-vhost/linux-next] [also build test WARNING on linus/master v6.3-rc3 next-20230320] [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#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Viktor-Prutyanov/virtio-add-VIRTIO_F_NOTIFICATION_DATA-feature-support/20230320-195725 base: https://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git linux-next patch link: https://lore.kernel.org/r/20230320115451.1232171-1-viktor%40daynix.com patch subject: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support config: i386-randconfig-s003 (https://download.01.org/0day-ci/archive/20230321/202303210403.lsrg8goq-...@intel.com/config) compiler: gcc-11 (Debian 11.3.0-8) 11.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.4-39-gce1a6720-dirty # https://github.com/intel-lab-lkp/linux/commit/b6212a12ca1691dc346e5de046ec46bd3ce11247 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Viktor-Prutyanov/virtio-add-VIRTIO_F_NOTIFICATION_DATA-feature-support/20230320-195725 git checkout b6212a12ca1691dc346e5de046ec46bd3ce11247 # save the config file mkdir build_dir && cp config build_dir/.config make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 olddefconfig make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash drivers/virtio/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot | Link: https://lore.kernel.org/oe-kbuild-all/202303210403.lsrg8goq-...@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/virtio/virtio_mmio.c:293:16: sparse: sparse: incorrect type in >> argument 1 (different base types) @@ expected unsigned int val @@ >> got restricted __le32 [usertype] data @@ drivers/virtio/virtio_mmio.c:293:16: sparse: expected unsigned int val drivers/virtio/virtio_mmio.c:293:16: sparse: got restricted __le32 [usertype] data vim +293 drivers/virtio/virtio_mmio.c 287 288 static bool vm_notify_with_data(struct virtqueue *vq) 289 { 290 struct virtio_mmio_device *vm_dev = to_virtio_mmio_device(vq->vdev); 291 __le32 data = vring_fill_notification_data(vq); 292 > 293 writel(data, vm_dev->base + VIRTIO_MMIO_QUEUE_NOTIFY); 294 295 return true; 296 } 297 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests ___ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Re: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support
Hi Viktor, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on mst-vhost/linux-next] [also build test WARNING on linus/master v6.3-rc3 next-20230320] [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#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Viktor-Prutyanov/virtio-add-VIRTIO_F_NOTIFICATION_DATA-feature-support/20230320-195725 base: https://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git linux-next patch link: https://lore.kernel.org/r/20230320115451.1232171-1-viktor%40daynix.com patch subject: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support config: nios2-randconfig-s051-20230319 (https://download.01.org/0day-ci/archive/20230321/202303210449.m2erqjxb-...@intel.com/config) compiler: nios2-linux-gcc (GCC) 12.1.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-39-gce1a6720-dirty # https://github.com/intel-lab-lkp/linux/commit/b6212a12ca1691dc346e5de046ec46bd3ce11247 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Viktor-Prutyanov/virtio-add-VIRTIO_F_NOTIFICATION_DATA-feature-support/20230320-195725 git checkout b6212a12ca1691dc346e5de046ec46bd3ce11247 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=nios2 olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=nios2 SHELL=/bin/bash drivers/virtio/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot | Link: https://lore.kernel.org/oe-kbuild-all/202303210449.m2erqjxb-...@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/virtio/virtio_mmio.c:293:16: sparse: sparse: incorrect type in >> argument 1 (different base types) @@ expected unsigned int [usertype] >> value @@ got restricted __le32 [usertype] data @@ drivers/virtio/virtio_mmio.c:293:16: sparse: expected unsigned int [usertype] value drivers/virtio/virtio_mmio.c:293:16: sparse: got restricted __le32 [usertype] data vim +293 drivers/virtio/virtio_mmio.c 287 288 static bool vm_notify_with_data(struct virtqueue *vq) 289 { 290 struct virtio_mmio_device *vm_dev = to_virtio_mmio_device(vq->vdev); 291 __le32 data = vring_fill_notification_data(vq); 292 > 293 writel(data, vm_dev->base + VIRTIO_MMIO_QUEUE_NOTIFY); 294 295 return true; 296 } 297 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests ___ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Re: [PATCH] virtio: add VIRTIO_F_NOTIFICATION_DATA feature support
On Mon, Mar 20, 2023 at 02:54:51PM +0300, Viktor Prutyanov wrote: > According to VirtIO spec v1.2, VIRTIO_F_NOTIFICATION_DATA feature > indicates that the driver passes extra data along with the queue > notifications. > > In a split queue case, the extra data is 16-bit available index. In a > packed queue case, the extra data is 1-bit wrap counter and 15-bit > available index. > > Add support for this feature for both MMIO and PCI. > > Signed-off-by: Viktor Prutyanov > --- > drivers/virtio/virtio_mmio.c | 15 ++- > drivers/virtio/virtio_pci_common.c | 10 ++ > drivers/virtio/virtio_pci_common.h | 4 > drivers/virtio/virtio_pci_legacy.c | 2 +- > drivers/virtio/virtio_pci_modern.c | 2 +- > drivers/virtio/virtio_ring.c | 17 + > include/linux/virtio_ring.h| 2 ++ > include/uapi/linux/virtio_config.h | 6 ++ > 8 files changed, 55 insertions(+), 3 deletions(-) > > diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c > index 3ff746e3f24a..05da5ad7fc93 100644 > --- a/drivers/virtio/virtio_mmio.c > +++ b/drivers/virtio/virtio_mmio.c > @@ -285,6 +285,19 @@ static bool vm_notify(struct virtqueue *vq) > return true; > } > > +static bool vm_notify_with_data(struct virtqueue *vq) > +{ > + struct virtio_mmio_device *vm_dev = to_virtio_mmio_device(vq->vdev); > + __le32 data = vring_fill_notification_data(vq); > + > + writel(data, vm_dev->base + VIRTIO_MMIO_QUEUE_NOTIFY); > + > + return true; > +} > + > +#define VM_NOTIFY(vdev) (__virtio_test_bit((vdev), > VIRTIO_F_NOTIFICATION_DATA) \ > + ? vm_notify_with_data : vm_notify) > + > /* Notify all virtqueues on an interrupt. */ > static irqreturn_t vm_interrupt(int irq, void *opaque) > { > @@ -397,7 +410,7 @@ static struct virtqueue *vm_setup_vq(struct virtio_device > *vdev, unsigned int in > > /* Create the vring */ > vq = vring_create_virtqueue(index, num, VIRTIO_MMIO_VRING_ALIGN, vdev, > - true, true, ctx, vm_notify, callback, name); > + true, true, ctx, VM_NOTIFY(vdev), callback, name); > if (!vq) { > err = -ENOMEM; > goto error_new_virtqueue; > diff --git a/drivers/virtio/virtio_pci_common.c > b/drivers/virtio/virtio_pci_common.c > index a6c86f916dbd..bf7daad9ce65 100644 > --- a/drivers/virtio/virtio_pci_common.c > +++ b/drivers/virtio/virtio_pci_common.c > @@ -43,6 +43,16 @@ bool vp_notify(struct virtqueue *vq) > /* we write the queue's selector into the notification register to >* signal the other end */ > iowrite16(vq->index, (void __iomem *)vq->priv); > + > + return true; > +} > + > +bool vp_notify_with_data(struct virtqueue *vq) > +{ > + __le32 data = vring_fill_notification_data(vq); > + > + iowrite32(data, (void __iomem *)vq->priv); > + > return true; > } > > diff --git a/drivers/virtio/virtio_pci_common.h > b/drivers/virtio/virtio_pci_common.h > index 23112d84218f..9a7212dcbb32 100644 > --- a/drivers/virtio/virtio_pci_common.h > +++ b/drivers/virtio/virtio_pci_common.h > @@ -105,6 +105,7 @@ static struct virtio_pci_device *to_vp_device(struct > virtio_device *vdev) > void vp_synchronize_vectors(struct virtio_device *vdev); > /* the notify function used when creating a virt queue */ > bool vp_notify(struct virtqueue *vq); > +bool vp_notify_with_data(struct virtqueue *vq); > /* the config->del_vqs() implementation */ > void vp_del_vqs(struct virtio_device *vdev); > /* the config->find_vqs() implementation */ > @@ -114,6 +115,9 @@ int vp_find_vqs(struct virtio_device *vdev, unsigned int > nvqs, > struct irq_affinity *desc); > const char *vp_bus_name(struct virtio_device *vdev); > > +#define VP_NOTIFY(vdev) (__virtio_test_bit((vdev), > VIRTIO_F_NOTIFICATION_DATA) \ > + ? vp_notify : vp_notify_with_data) > + > /* Setup the affinity for a virtqueue: > * - force the affinity for per vq vector > * - OR over all affinities for shared MSI > diff --git a/drivers/virtio/virtio_pci_legacy.c > b/drivers/virtio/virtio_pci_legacy.c > index 2257f1b3d8ae..b98e994cae48 100644 > --- a/drivers/virtio/virtio_pci_legacy.c > +++ b/drivers/virtio/virtio_pci_legacy.c > @@ -131,7 +131,7 @@ static struct virtqueue *setup_vq(struct > virtio_pci_device *vp_dev, > vq = vring_create_virtqueue(index, num, > VIRTIO_PCI_VRING_ALIGN, _dev->vdev, > true, false, ctx, > - vp_notify, callback, name); > + VP_NOTIFY(_dev->vdev), callback, name); > if (!vq) > return ERR_PTR(-ENOMEM); > > diff --git a/drivers/virtio/virtio_pci_modern.c > b/drivers/virtio/virtio_pci_modern.c > index 9e496e288cfa..7fcd8af5af7e 100644 > --- a/drivers/virtio/virtio_pci_modern.c > +++ b/drivers/virtio/virtio_pci_modern.c > @@ -321,7 +321,7 @@ static struct virtqueue