On 2016-07-05 10:19, Peter Xu wrote: > Remove VT-d calls in common q35 codes. Instead, we provide a general > find_add_as() for x86-iommu type. > > Signed-off-by: Peter Xu <pet...@redhat.com> > --- > hw/i386/intel_iommu.c | 15 ++++++++------- > include/hw/i386/intel_iommu.h | 5 ----- > include/hw/i386/x86-iommu.h | 3 +++ > 3 files changed, 11 insertions(+), 12 deletions(-)
You claim to remove something from "common q35 code", but I don't see changes to it. Instead, the patch introduces a method that seems to remain unused outside the implementing class (I just grep'ed your tree). Anything missing? Jan > > diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c > index 3ee5782..2ac79ab 100644 > --- a/hw/i386/intel_iommu.c > +++ b/hw/i386/intel_iommu.c > @@ -1910,8 +1910,10 @@ static Property vtd_properties[] = { > }; > > > -VTDAddressSpace *vtd_find_add_as(IntelIOMMUState *s, PCIBus *bus, int devfn) > +static AddressSpace *vtd_find_add_as(X86IOMMUState *x86_iommu, PCIBus *bus, > + int devfn) > { > + IntelIOMMUState *s = (IntelIOMMUState *)x86_iommu; > uintptr_t key = (uintptr_t)bus; > VTDBus *vtd_bus = g_hash_table_lookup(s->vtd_as_by_busptr, &key); > VTDAddressSpace *vtd_dev_as; > @@ -1939,7 +1941,7 @@ VTDAddressSpace *vtd_find_add_as(IntelIOMMUState *s, > PCIBus *bus, int devfn) > address_space_init(&vtd_dev_as->as, > &vtd_dev_as->iommu, "intel_iommu"); > } > - return vtd_dev_as; > + return &vtd_dev_as->as; > } > > /* Do the initialization. It will also be called when reset, so pay > @@ -2032,13 +2034,11 @@ static void vtd_reset(DeviceState *dev) > > static AddressSpace *vtd_host_dma_iommu(PCIBus *bus, void *opaque, int devfn) > { > - IntelIOMMUState *s = opaque; > - VTDAddressSpace *vtd_as; > + X86IOMMUState *x86_iommu = opaque; > + X86IOMMUClass *x86_class = X86_IOMMU_GET_CLASS(x86_iommu); > > assert(0 <= devfn && devfn <= X86_IOMMU_PCI_DEVFN_MAX); > - > - vtd_as = vtd_find_add_as(s, bus, devfn); > - return &vtd_as->as; > + return x86_class->find_add_as(x86_iommu, bus, devfn); > } > > static void vtd_realize(DeviceState *dev, Error **errp) > @@ -2071,6 +2071,7 @@ static void vtd_class_init(ObjectClass *klass, void > *data) > dc->props = vtd_properties; > dc->hotpluggable = false; > x86_class->realize = vtd_realize; > + x86_class->find_add_as = vtd_find_add_as; > } > > static const TypeInfo vtd_info = { > diff --git a/include/hw/i386/intel_iommu.h b/include/hw/i386/intel_iommu.h > index 0794309..e36b896 100644 > --- a/include/hw/i386/intel_iommu.h > +++ b/include/hw/i386/intel_iommu.h > @@ -125,9 +125,4 @@ struct IntelIOMMUState { > VTDBus *vtd_as_by_bus_num[VTD_PCI_BUS_MAX]; /* VTDBus objects indexed by > bus number */ > }; > > -/* Find the VTD Address space associated with the given bus pointer, > - * create a new one if none exists > - */ > -VTDAddressSpace *vtd_find_add_as(IntelIOMMUState *s, PCIBus *bus, int devfn); > - > #endif > diff --git a/include/hw/i386/x86-iommu.h b/include/hw/i386/x86-iommu.h > index b2401a6..581da16 100644 > --- a/include/hw/i386/x86-iommu.h > +++ b/include/hw/i386/x86-iommu.h > @@ -21,6 +21,7 @@ > #define IOMMU_COMMON_H > > #include "hw/sysbus.h" > +#include "exec/memory.h" > > #define TYPE_X86_IOMMU_DEVICE ("x86-iommu") > #define X86_IOMMU_DEVICE(obj) \ > @@ -39,6 +40,8 @@ struct X86IOMMUClass { > SysBusDeviceClass parent; > /* Intel/AMD specific realize() hook */ > DeviceRealize realize; > + /* Find/Add IOMMU address space for specific PCI device */ > + AddressSpace *(*find_add_as)(X86IOMMUState *s, PCIBus *bus, int devfn); > }; > > struct X86IOMMUState { >
signature.asc
Description: OpenPGP digital signature