virtio_pci_modern: introduce helper to map vq notify area
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> Link: https://lore.kernel.org/r/20210415073147.19331-2-jasowang@redhat.com Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Eli Cohen <elic@nvidia.com>
This commit is contained in:
parent
122b84a126
commit
9e3bb9b79a
@ -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);
|
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_VERSION("0.1");
|
||||||
MODULE_DESCRIPTION("Modern Virtio PCI Device");
|
MODULE_DESCRIPTION("Modern Virtio PCI Device");
|
||||||
MODULE_AUTHOR("Jason Wang <jasowang@redhat.com>");
|
MODULE_AUTHOR("Jason Wang <jasowang@redhat.com>");
|
||||||
|
@ -106,6 +106,8 @@ void __iomem *vp_modern_map_capability(struct virtio_pci_modern_device *mdev, in
|
|||||||
u32 align,
|
u32 align,
|
||||||
u32 start, u32 size,
|
u32 start, u32 size,
|
||||||
size_t *len);
|
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);
|
int vp_modern_probe(struct virtio_pci_modern_device *mdev);
|
||||||
void vp_modern_remove(struct virtio_pci_modern_device *mdev);
|
void vp_modern_remove(struct virtio_pci_modern_device *mdev);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user