mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 14:12:06 +00:00
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);
|
||||
|
||||
/*
|
||||
* 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>");
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user