diff options
| -rw-r--r-- | drivers/virtio/virtio_ring.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index e12e385f7ac3..ab0be6c084f6 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c | |||
| @@ -104,6 +104,30 @@ struct vring_virtqueue { | |||
| 104 | 104 | ||
| 105 | #define to_vvq(_vq) container_of(_vq, struct vring_virtqueue, vq) | 105 | #define to_vvq(_vq) container_of(_vq, struct vring_virtqueue, vq) |
| 106 | 106 | ||
| 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 | |||
| 107 | static struct vring_desc *alloc_indirect(struct virtqueue *_vq, | 131 | static struct vring_desc *alloc_indirect(struct virtqueue *_vq, |
| 108 | unsigned int total_sg, gfp_t gfp) | 132 | unsigned int total_sg, gfp_t gfp) |
| 109 | { | 133 | { |
