>From time to time, I was always thinking whether we should have a IOMMU object in common, not depending on platform (x86/ppc/...), or bus (PCI/...). Virt-svm is a case that may use it now - it needs to register some notifiers so that when some event triggered the callback can be invoked. However current MemoryRegion IOMMU notifiers do not suite well with that purpose, since the notifiers are mostly binded to memory regions and tailored to IOTLB notifications, while for virt-svm it should be listening to one IOMMU device, rather than a specific memory region.
This series tried to do several things: - renaming old "iommu notifiers" into "iotlb notifiers", to avoid confusion of what it is used for - introduce a way to fetch an IOMMU object from a device DMA address space (for x86, it should be a pci device) - introduce a common IOMMU object, along with a similar notifier mechanism for it There is a use-case example in the last patch to show how to use it, on how to modify customized IOMMU device to have such a common object, and on how to use the notifiers (merely the same as old one). If with luck, this series can be a pre-requisite for the following patchset: [RFC PATCH 00/20] Qemu: Extend intel_iommu emulator to support Shared Virtual Memory But before that, looking forward to any of your comments. Test done: compile test only. Please kindly review. Thanks. Peter Xu (8): memory: rename IOMMU_NOTIFIER_* memory: rename IOMMUNotifier memory: rename iommu_notifier_init() memory: rename *_notify_iommu* memory: rename *iommu_notifier* memory: introduce AddressSpaceOps intel_iommu: provide AddressSpaceOps.iommu_get() iommu: introduce hw/core/iommu hw/core/Makefile.objs | 1 + hw/core/iommu.c | 61 +++++++++++++++++++++++++++++ hw/i386/amd_iommu.c | 6 +-- hw/i386/intel_iommu.c | 47 +++++++++++++--------- hw/ppc/spapr_iommu.c | 10 ++--- hw/s390x/s390-pci-inst.c | 2 +- hw/vfio/common.c | 16 ++++---- hw/virtio/vhost.c | 14 +++---- include/exec/memory.h | 91 +++++++++++++++++++++++++++---------------- include/hw/core/iommu.h | 72 ++++++++++++++++++++++++++++++++++ include/hw/i386/intel_iommu.h | 10 +++-- include/hw/vfio/vfio-common.h | 2 +- include/hw/virtio/vhost.h | 4 +- memory.c | 54 ++++++++++++++----------- 14 files changed, 283 insertions(+), 107 deletions(-) create mode 100644 hw/core/iommu.c create mode 100644 include/hw/core/iommu.h -- 2.7.4