Skip to content

Commit d26c96c

Browse files
amlutomstsirkin
authored andcommitted
vring: Introduce vring_use_dma_api()
This is a kludge, but no one has come up with a a better idea yet. We'll introduce DMA API support guarded by vring_use_dma_api(). Eventually we may be able to return true on more and more systems, and hopefully we can get rid of vring_use_dma_api() entirely some day. Signed-off-by: Andy Lutomirski <luto@kernel.org> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
1 parent e82becf commit d26c96c

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

drivers/virtio/virtio_ring.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,30 @@ struct vring_virtqueue {
104104

105105
#define to_vvq(_vq) container_of(_vq, struct vring_virtqueue, vq)
106106

107+
/*
108+
* The interaction between virtio and a possible IOMMU is a mess.
109+
*
110+
* On most systems with virtio, physical addresses match bus addresses,
111+
* and it doesn't particularly matter whether we use the DMA API.
112+
*
113+
* On some systems, including Xen and any system with a physical device
114+
* that speaks virtio behind a physical IOMMU, we must use the DMA API
115+
* for virtio DMA to work at all.
116+
*
117+
* On other systems, including SPARC and PPC64, virtio-pci devices are
118+
* enumerated as though they are behind an IOMMU, but the virtio host
119+
* ignores the IOMMU, so we must either pretend that the IOMMU isn't
120+
* there or somehow map everything as the identity.
121+
*
122+
* For the time being, we preserve historic behavior and bypass the DMA
123+
* API.
124+
*/
125+
126+
static bool vring_use_dma_api(struct virtio_device *vdev)
127+
{
128+
return false;
129+
}
130+
107131
static struct vring_desc *alloc_indirect(struct virtqueue *_vq,
108132
unsigned int total_sg, gfp_t gfp)
109133
{

0 commit comments

Comments
 (0)