On Thu, Jun 12, 2025 at 02:06:15PM +0000, Shameerali Kolothum Thodi wrote: > > >> The "switch" in vSMMU model is only needed by KVM for MSI doorbell > > >> translation. By thinking it carefully, maybe it shouldn't switch AS > > >> because VFIO might be confused if it somehow does get_address_space > > >> again in the future.. > > > > @Nicolin, not quite get the detailed logic for the MSI stuff on SMMU. But I > > agree with the last sentence. get_address_space should return a consistent > > AS. > > I think it is because, in ARM world the MSI doorbell address is translated by > an IOMMU. Hence, if the Guest device is behind IOMMU, it needs to return > the IOMMU AS in, > > kvm_irqchip_add_msi_route() > kvm_arch_fixup_msi_route() > pci_device_iommu_address_space() --> .get_address_space() -->At this > point we now return IOMMU AS. > > If not the device will be configured with a wrong MSI doorbell address.
Yes. The KVM code on ARM needs to translate the MSI location from gIOVA to gPA, because MSI on ARM is behind IOMMU. > Nicolin, you seems to suggest we could avoid this switching and always return > System AS. Does that mean we handle this KVM/MSI case separately? > Could you please detail out the idea? We could add one of following ops: get_msi_address_space get_msi_address/translate_msi_iova Thanks Nicolin