VT-d emulation is currently incompatible with device assignment due to intel_iommu's lack of support for memory_region_notify_iommu(). Alexey has proposed a nice addition to the MemoryRegionIOMMUOps structure that adds callbacks when the first iommu notifier is registered and the last is removed. For POWER this will allow them to switch the view of the iommu depending on whether anyone in userspace is watching. For VT-d I expect that eventually we'll use these callbacks to enable and disable code paths so that we avoid notifier overhead when there are no registered notifiy-ees. For now, we don't support calling memory_region_notify_iommu(), so this signals an incompatible hardware configuration. If we choose to make CM=0 a user selectable option, something like this might continue to be useful if we only support notifies via invalidations rather than full VT-d data structure shadowing.
Even though we're currently working on enabling users like vfio-pci with VT-d, I believe this is correct for the current state of things. We might even want to consider this stable for v2.6.x so that downstreams pick it up to avoid incompatible configurations. Alexey, I hope I'm not stepping on your toes by extracting this from your latest patch series. Please let us know whether you approve. Thanks, Alex --- Alex Williamson (1): intel_iommu: Throw hw_error on notify_started Alexey Kardashevskiy (1): memory: Add MemoryRegionIOMMUOps.notify_started/stopped callbacks hw/i386/intel_iommu.c | 12 ++++++++++++ hw/vfio/common.c | 5 +++-- include/exec/memory.h | 8 +++++++- memory.c | 10 +++++++++- 4 files changed, 31 insertions(+), 4 deletions(-)