Messages in this thread | | | Subject | Re: [PATCH 2/2] virtio: let virtio use DMA API when guest RAM is protected | From | Jason Wang <> | Date | Fri, 21 Feb 2020 11:41:57 +0800 |
| |
On 2020/2/21 上午10:59, David Gibson wrote: > On Thu, Feb 20, 2020 at 05:13:09PM +0100, Christoph Hellwig wrote: >> On Thu, Feb 20, 2020 at 05:06:06PM +0100, Halil Pasic wrote: >>> diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c >>> index 867c7ebd3f10..fafc8f924955 100644 >>> --- a/drivers/virtio/virtio_ring.c >>> +++ b/drivers/virtio/virtio_ring.c >>> @@ -243,6 +243,9 @@ static bool vring_use_dma_api(struct virtio_device *vdev) >>> if (!virtio_has_iommu_quirk(vdev)) >>> return true; >>> >>> + if (force_dma_unencrypted(&vdev->dev)) >>> + return true; >> Hell no. This is a detail of the platform DMA direct implementation. >> Drivers have no business looking at this flag, and virtio finally needs >> to be fixed to use the DMA API properly for everything but legacy devices. > So, this patch definitely isn't right as it stands, but I'm struggling > to understand what it is you're saying is the right way. > > By "legacy devices" I assume you mean pre-virtio-1.0 devices, that > lack the F_VERSION_1 feature flag. Is that right? Because I don't > see how being a legacy device or not relates to use of the DMA API. > > I *think* what you are suggesting here is that virtio devices that > have !F_IOMMU_PLATFORM should have their dma_ops set up so that the > DMA API treats IOVA==PA, which will satisfy what the device expects.
Can this work for swiotlb?
Thanks
> Then the virtio driver can use the DMA API the same way for both > F_IOMMU_PLATFORM and !F_IOMMU_PLATFORM devices. > > But if that works for !F_IOMMU_PLATFORM_DEVICES+F_VERSION_1 devices, > then AFAICT it will work equally well for legacy devices. > > Using the DMA API for *everything* in virtio, legacy or not, seems > like a reasonable approach to me. But, AFAICT, that does require the > DMA layer to have some kind of explicit call to turn on this > behaviour, which the virtio driver would call during initializsation. > I don't think we can do it 100% within the DMA layer, because only the > driver can reasonably know when a device has this weird non-standard > DMA behaviour. >
| |