[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] vhost: Warn if DEVIOTLB_UNMAP is not supported and ats is se
From: |
Eric Auger |
Subject: |
Re: [PATCH] vhost: Warn if DEVIOTLB_UNMAP is not supported and ats is set |
Date: |
Tue, 18 Oct 2022 17:08:19 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 |
Hi Peter,
On 10/18/22 16:25, Peter Xu wrote:
> Hi, Eric,
>
> On Tue, Oct 18, 2022 at 02:28:52PM +0200, Eric Auger wrote:
>> Since b68ba1ca5767 ("memory: Add IOMMU_NOTIFIER_DEVIOTLB_UNMAP
>> IOMMUTLBNotificationType"), vhost attempts to register DEVIOTLB_UNMAP
>> notifier. This latter is supported by the intel-iommu which supports
>> device-iotlb if the corresponding option is set. Then 958ec334bca3
>> ("vhost: Unbreak SMMU and virtio-iommu on dev-iotlb support") allowed
>> silent fallback to the legacy UNMAP notifier if the viommu does not
>> support device iotlb.
>>
>> Initially vhost/viommu integration was introduced with intel iommu
>> assuming ats=on was set on virtio-pci device and device-iotlb was set
>> on the intel iommu. vhost acts as an ATS capable device since it
>> implements an IOTLB on kernel side. However translated transactions
>> that hit the device IOTLB do not transit through the vIOMMU. So this
>> requires a limited ATS support on viommu side.
>>
>> However, in theory, if ats=on is set on a pci device, the
>> viommu should support ATS for that device to work.
> Pure question: what will happen if one ATS supported PCI device got plugged
> into a system whose physical IOMMU does not support ATS? Will ATS just be
> ignored and the device keep working simply without ATS?
Yes that's my understanding: in that case the ATS capable device would
work with ats disabled (baremetal case). In the iommu driver you can
have a look at the pci_enable_ats() call which is guarded by
info->ats_supported for instance on intel iommu.
Following that reasoning vhost modality should not be enabled without
ATS support on vIOMMU side. But it is.
In that sense I may rename the ats_enabled helpers with ats_capable? If
I understand correctly setting ats=on exposes the ATS capability (
615c4ed205 virtio-pci: address space translation service (ATS) support)
which is then enabled by the guest driver.
> [1]
>
> [...]
>
>> @@ -760,8 +771,16 @@ static void vhost_iommu_region_add(MemoryListener
>> *listener,
>> iommu->iommu_offset = section->offset_within_address_space -
>> section->offset_within_region;
>> iommu->hdev = dev;
>> - ret = memory_region_register_iommu_notifier(section->mr, &iommu->n,
>> NULL);
>> + ret = memory_region_register_iommu_notifier(section->mr, &iommu->n,
>> &err);
>> if (ret) {
>> + if (vhost_dev_ats_enabled(dev)) {
>> + error_reportf_err(err,
>> + "vhost cannot register DEVIOTLB_UNMAP "
>> + "although ATS is enabled, "
>> + "fall back to legacy UNMAP notifier: ");
> We want to use the warning message to either remind the user to (1) add the
> dev-iotlb=on parameter for vIOMMU, or (2) drop the ats=on on device. Am I
> right?
My focus is to warn the end user there is no support for device-iotlb
support in virtio-iommu or vsmmuv3 but vhost does not really require
it.Indeed current users of virtio-iommu/vsmmuv3 seem confused now wrt
vhost integration and the lack of device-iotlb option on those viommus.
On intel I understand we would like to enforce that ats and dev-iotlb
are both set or unset. But this is not really addressed in that series.
Indeed vtd_iommu_notify_flag_changed does not reject any registration of
IOMMU_NOTIFIER_DEVIOTLB_UNMAP notifier in case it does not support
device-iotlb. I think it should. The trouble is vhost_iommu_region_add
is not meant to nicely fail.
>
> As we've discussed - I remember Jason used to test with/without dev-iotlb
> on vhost on Intel and dev-iotlb is faster on vt-d guest driver than without
It would be nice to have a clarification about this. Indeed
[PATCH v3 0/5] memory: Skip assertion in memory_region_unregister_iommu_notifier
https://lore.kernel.org/all/20201116165506.31315-1-eperezma@redhat.com/
mostly focussed on removing an assertion although one patch mentionned perf
improvements. What does make the perf better (less device iotlb flushes than
general iotlb flushes?)
> it. So that can make sense to me for (1). I don't know whether it helps
> for (2) because fundamentally it's the same question as [1] above, and
> whether that's a legal configuration.
>
> Thanks,
>
Adding jean in the loop too
Thanks
Eric