This is a proposal on how to create the iommu with '-device intel-iommu' instead of '-machine,iommu=on'.
The device is part of the machine properties because we wanted to ensure it is created before any other PCI device. The alternative is to skip the bus_master_enable_region at the time the device is created. We can create this region at machine_done phase. (patch 1) Then we can enable sysbus devices for PC machines and make all the init steps inside the iommu realize function. (patch 2) The series is working, but a lot of issues are not resolved: - minimum testing was done - the iommu addr should be passed (maybe) in command line rather than hard-coded - enabling sysbus devices for PC machines is risky, I am not aware yet of the side effects of this modification. - I am not sure moving the bus_master_enable_region to machine_done is with no undesired effects. Thanks, Marcel Marcel Apfelbaum (2): hw/pci: delay bus_master_enable_region initialization hw/iommu: enable iommu with -device hw/core/machine.c | 20 -------------------- hw/i386/intel_iommu.c | 17 +++++++++++++++++ hw/i386/pc.c | 17 +++++++++++++++++ hw/i386/pc_q35.c | 1 + hw/pci-host/q35.c | 28 ---------------------------- hw/pci/pci.c | 22 ++++++++++++---------- include/hw/pci/pci.h | 2 ++ 7 files changed, 49 insertions(+), 58 deletions(-) -- 2.4.3