On Wed, Nov 11 2020 at 08:09, Ashok Raj wrote: > On Wed, Nov 11, 2020 at 03:41:59PM +0000, Christoph Hellwig wrote: >> On Sun, Nov 08, 2020 at 07:36:34PM +0000, David Woodhouse wrote: >> > So it does look like we're going to need a hypercall interface to >> > compose an MSI message on behalf of the guest, for IMS to use. In fact >> > PCI devices assigned to a guest could use that too, and then we'd only >> > need to trap-and-remap any attempt to write a Compatibility Format MSI >> > to the device's MSI table, while letting Remappable Format messages get >> > written directly. >> > >> > We'd also need a way for an OS running on bare metal to *know* that >> > it's on bare metal and can just compose MSI messages for itself. Since >> > we do expect bare metal to have an IOMMU, perhaps that is just a >> > feature flag on the IOMMU? >> >> Have the platform firmware advertise if it needs native or virtualized >> IMS handling. If it advertises neither don't support IMS? > > The platform hint can be easily accomplished via DMAR table flags. We could > have an IMS_OPTOUT(similart to x2apic optout flag) flag, when 0 its native > and IMS is supported. > > When vIOMMU is presented to guest, virtual DMAR table will have this flag > set to 1. Indicates to GuestOS, native IMS isn't supported. These opt-out bits suck by definition. It comes all back to the fact that the whole virt thing didn't have a hardware defined way to tell that the OS runs in a VM and not on bare metal. It wouldn't have been rocket science to do so. And because that does not exist, we need magic opt-out bits for every other piece of functionality which gets added. Can we please stop this and provide a well defined way to tell the OS whether it runs on bare metal or not? The point is that you really want opt-in bits so that decisions come down to if (!virt || virt->supports_X) which is the obvious sane and safe logic. But sure, why am I asking for sane and safe in the context of virtualization? Thanks, tglx