summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorTom Rini <[email protected]>2023-04-25 14:22:40 -0400
committerTom Rini <[email protected]>2023-04-25 14:22:40 -0400
commitbad2618b8c5c7e18dcfb9ff6a7d108e389d20cf7 (patch)
treedd96eae340d934015017a673ef06127c49c7a645 /include
parent6a11fdf0536e02ac9cd4a3da0535a271c694715f (diff)
parentb0a2fe148a70dc805f1e11702a08a7065418a8dd (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.h21
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