Re: [PATCH 1/7] virtio_pci_modern: introduce helper to map vq notify area

Eli Cohen
2021-04-21T07:44:33Z

On Thu, Apr 15, 2021 at 03:31:41AM -0400, Jason Wang wrote:
> This patch factors out the logic of vq notify area mapping. Following
> patches will switch to use this common helpers for both virtio_pci
> library and virtio-pci vDPA driver.
>
> Signed-off-by: Jason Wang <jasowang@redhat.com>

Reviewed-by: Eli Cohen <elic@nvidia.com>

> ---
> drivers/virtio/virtio_pci_modern_dev.c | 35 ++++++++++++++++++++++++++
> include/linux/virtio_pci_modern.h | 2 ++
> 2 files changed, 37 insertions(+)
>
> diff --git a/drivers/virtio/virtio_pci_modern_dev.c b/drivers/virtio/virtio_pci_modern_dev.c
> index cbd667496bb1..28cb5847fafa 100644
> --- a/drivers/virtio/virtio_pci_modern_dev.c
> +++ b/drivers/virtio/virtio_pci_modern_dev.c
> @@ -593,6 +593,41 @@ u16 vp_modern_get_queue_notify_off(struct virtio_pci_modern_device *mdev,
> }
> EXPORT_SYMBOL_GPL(vp_modern_get_queue_notify_off);
>
> +/*
> + * vp_modern_map_vq_notify - map notification area for a
> + * specific virtqueue
> + * @mdev: the modern virtio-pci device
> + * @index: the queue index
> + *
> + * Returns the address of the notification area
> + */
> +void *vp_modern_map_vq_notify(struct virtio_pci_modern_device *mdev,
> + u16 index)
> +{
> + u16 off = vp_modern_get_queue_notify_off(mdev, index);
> +
> + if (mdev->notify_base) {
> + /* offset should not wrap */
> + if ((u64)off * mdev->notify_offset_multiplier + 2
> + > mdev->notify_len) {
> + dev_warn(&mdev->pci_dev->dev,
> + "bad notification offset %u (x %u) "
> + "for queue %u > %zd",
> + off, mdev->notify_offset_multiplier,
> + index, mdev->notify_len);
> + return NULL;
> + }
> + return (void __force *)mdev->notify_base +
> + off * mdev->notify_offset_multiplier;
> + } else {
> + return (void __force *)vp_modern_map_capability(mdev,
> + mdev->notify_map_cap, 2, 2,
> + off * mdev->notify_offset_multiplier, 2,
> + NULL);
> + }
> +}
> +EXPORT_SYMBOL_GPL(vp_modern_map_vq_notify);
> +
> MODULE_VERSION("0.1");
> MODULE_DESCRIPTION("Modern Virtio PCI Device");
> MODULE_AUTHOR("Jason Wang <jasowang@redhat.com>");
> diff --git a/include/linux/virtio_pci_modern.h b/include/linux/virtio_pci_modern.h
> index f26acbeec965..1b95d39b00fc 100644
> --- a/include/linux/virtio_pci_modern.h
> +++ b/include/linux/virtio_pci_modern.h
> @@ -106,6 +106,8 @@ void __iomem *vp_modern_map_capability(struct virtio_pci_modern_device *mdev, in
> u32 align,
> u32 start, u32 size,
> size_t *len);
> +void *vp_modern_map_vq_notify(struct virtio_pci_modern_device *mdev,
> + u16 index);
> int vp_modern_probe(struct virtio_pci_modern_device *mdev);
> void vp_modern_remove(struct virtio_pci_modern_device *mdev);
> #endif
> --
> 2.18.1
>