On Thu, Feb 08, 2024 at 09:16:35AM +0100, Eric Auger wrote: > >> diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c > >> index ec2ba11d1d..7870bdbeee 100644 > >> --- a/hw/virtio/virtio-iommu.c > >> +++ b/hw/virtio/virtio-iommu.c > >> @@ -1314,7 +1314,11 @@ static void virtio_iommu_device_realize(DeviceState > >> *dev, Error **errp) > >> */ > >> s->config.bypass = s->boot_bypass; > >> s->config.page_size_mask = qemu_real_host_page_mask(); > >> - s->config.input_range.end = UINT64_MAX; > >> + if (s->aw_bits < 32 || s->aw_bits > 64) { > > I'm wondering if we should lower this to 16 bits, just to support all > > possible host SMMU configurations (the smallest address space configurable > > with T0SZ is 25-bit, or 16-bit with the STT extension). > Is it a valid use case case to assign host devices protected by > virtio-iommu with a physical SMMU featuring Small Translation Table?
Probably not, I'm guessing STT is for tiny embedded implementations where QEMU or even virtualization is not a use case. But because smaller mobile platforms now implement SMMUv3, using smaller IOVA spaces and thus fewer page tables can be beneficial. One use case I have in mind is android with pKVM, each app has its own VM, and devices can be partitioned into lots of address spaces with PASID, so you can save a lot of memory and table-walk time by shrinking those address space. But that particular case will use crosvm so isn't relevant here, it's only an example. Mainly I was concerned that if the Linux driver decides to allow configuring smaller address spaces (maybe a linux cmdline option), then using a architectural limit here would be a safe bet that things can still work. But we can always change it in a later version, or implement finer controls (ideally the guest driver would configure the VA size in ATTACH). > It leaves 64kB IOVA space only. Besides in the spec, it is wriiten the > min T0SZ can even be 12. > > "The minimum valid value is 16 unless all of the following also hold, in > which case the minimum permitted > value is 12: > – SMMUv3.1 or later is supported. > – SMMU_IDR5.VAX indicates support for 52-bit Vas. > – The corresponding CD.TGx selects a 64KB granule. > " Yes that's confusing because va_size = 64 - T0SZ, so T0SZ=12 actually describes the largest address size, 52. > > At the moment I would prefer to stick to the limit suggested by Alex > which looks also sensible for other archs whereas 16 doesn't. Agreed, it should be sufficient. Thanks, Jean