diff options
| author | Tom Rini <[email protected]> | 2023-04-25 14:22:40 -0400 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2023-04-25 14:22:40 -0400 |
| commit | bad2618b8c5c7e18dcfb9ff6a7d108e389d20cf7 (patch) | |
| tree | dd96eae340d934015017a673ef06127c49c7a645 /include | |
| parent | 6a11fdf0536e02ac9cd4a3da0535a271c694715f (diff) | |
| parent | b0a2fe148a70dc805f1e11702a08a7065418a8dd (diff) | |
Merge branch '2023-04-25-use-bounce-buffers-for-VIRTIO_F_IOMMU_PLATFORM'
To quote the author:
These patches will use bounce buffers when VIRTIO_F_IOMMU_PLATFORM
feature is in a virtio device.
This feature can be tested with qemu with -device virtio-iommu-pci. So
that when a -device virtio-blk-pci with iommu_platform=true, it will
uses the bounce buffer instead.
Diffstat (limited to 'include')
| -rw-r--r-- | include/virtio_ring.h | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/include/virtio_ring.h b/include/virtio_ring.h index c77c212cffd..e8e91044a27 100644 --- a/include/virtio_ring.h +++ b/include/virtio_ring.h @@ -86,6 +86,8 @@ struct vring_used { struct vring { unsigned int num; + size_t size; + struct bounce_buffer *bouncebufs; struct vring_desc *desc; struct vring_avail *avail; struct vring_used *used; @@ -137,23 +139,26 @@ struct virtqueue { #define vring_used_event(vr) ((vr)->avail->ring[(vr)->num]) #define vring_avail_event(vr) (*(__virtio16 *)&(vr)->used->ring[(vr)->num]) +static inline unsigned int vring_size(unsigned int num, unsigned long align) +{ + return ((sizeof(struct vring_desc) * num + + sizeof(__virtio16) * (3 + num) + align - 1) & ~(align - 1)) + + sizeof(__virtio16) * 3 + sizeof(struct vring_used_elem) * num; +} + static inline void vring_init(struct vring *vr, unsigned int num, void *p, - unsigned long align) + unsigned long align, + struct bounce_buffer *bouncebufs) { vr->num = num; + vr->size = vring_size(num, align); + vr->bouncebufs = bouncebufs; vr->desc = p; vr->avail = p + num * sizeof(struct vring_desc); vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(__virtio16) + align - 1) & ~(align - 1)); } -static inline unsigned int vring_size(unsigned int num, unsigned long align) -{ - return ((sizeof(struct vring_desc) * num + - sizeof(__virtio16) * (3 + num) + align - 1) & ~(align - 1)) + - sizeof(__virtio16) * 3 + sizeof(struct vring_used_elem) * num; -} - /* * The following is used with USED_EVENT_IDX and AVAIL_EVENT_IDX. * Assuming a given event_idx value from the other side, if we have just |
