>-----Original Message----- >From: Jean-Philippe Brucker <jean-phili...@linaro.org> >Sent: Wednesday, July 5, 2023 4:29 PM >Subject: Re: [PATCH 1/2] virtio-iommu: Fix 64kB host page size VFIO device >assignment > >On Wed, Jul 05, 2023 at 04:52:09AM +0000, Duan, Zhenzhong wrote: >> Hi Eric, >> >> >-----Original Message----- >> >From: Eric Auger <eric.au...@redhat.com> >> >Sent: Tuesday, July 4, 2023 7:15 PM >> >Subject: [PATCH 1/2] virtio-iommu: Fix 64kB host page size VFIO >> >device assignment >> > >> >When running on a 64kB page size host and protecting a VFIO device >> >with the virtio-iommu, qemu crashes with this kind of message: >> > >> >qemu-kvm: virtio-iommu page mask 0xfffffffffffff000 is incompatible >> >with mask 0x20010000 >> >> Does 0x20010000 mean only 512MB and 64KB super page mapping is >> supported for host iommu hw? 4KB mapping not supported? > >It's not a restriction by the HW IOMMU, but the host kernel. An Arm SMMU >can implement 4KB, 16KB and/or 64KB granules, but the host kernel only >advertises through VFIO the granule corresponding to host PAGE_SIZE. This >restriction is done by arm_lpae_restrict_pgsizes() in order to choose a page >size when a device is driven by the host.
Just curious why not advertises the Arm SMMU implemented granules to VFIO Eg:4KB, 16KB or 64KB granules? But arm_lpae_restrict_pgsizes() restricted ones, Eg: for SZ_4K, (SZ_4K | SZ_2M | SZ_1G). (SZ_4K | SZ_2M | SZ_1G) looks not real hardware granules of Arm SMMU. > >> >> There is a check in guest kernel side hint only 4KB is supported, with >> this patch we force viommu->pgsize_bitmap to 0x20010000 and fail below >> check? Does this device work in guest? >> Please correct me if I understand wrong. > >Right, a guest using 4KB pages under a host that uses 64KB is not supported, >because if the guest attempts to dma_map a 4K page, the IOMMU cannot >create a mapping small enough, the mapping would have to spill over >neighbouring guest memory. > >One possible solution would be supporting multiple page granules. If we >added a page granule negotiation through VFIO and virtio-iommu then the >guest could pick the page size it wants. But this requires changes to Linux >UAPI >so isn't a priority at the moment, because we're trying to enable nesting which >would support 64K-host/4K-guest as well. > >See also the discussion on the patch that introduced the guest check >https://lore.kernel.org/linux-iommu/20200318114047.1518048-1-jean- >phili...@linaro.org/ Clear, thanks for sharing the history. Regards Zhenzhong