From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40334) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XgLYR-0000gT-BQ for qemu-devel@nongnu.org; Mon, 20 Oct 2014 18:36:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XgLYK-0000Gz-DO for qemu-devel@nongnu.org; Mon, 20 Oct 2014 18:35:55 -0400 From: Knut Omang Date: Tue, 21 Oct 2014 00:34:02 +0200 Message-Id: <1413844443-28894-2-git-send-email-knut.omang@oracle.com> In-Reply-To: <1413844443-28894-1-git-send-email-knut.omang@oracle.com> References: <1413844443-28894-1-git-send-email-knut.omang@oracle.com> Subject: [Qemu-devel] [PATCH 1/2] iommu: Replace bus+devfn arguments with PCIDevice* in PCIIOMMUFunc List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Knut Omang , "Michael S. Tsirkin" , Michael Tokarev , Marcel Apfelbaum , Mark Cave-Ayland , Alexander Graf , Markus Armbruster , =?UTF-8?q?Andreas=20F=C3=A4rber?= , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , Anthony Liguori , Stefan Weil , qemu-ppc@nongnu.org, Richard Henderson The dev pointer is needed by intel_iommu to enable it to store the dma address pointer with the device. Signed-off-by: Knut Omang --- hw/alpha/typhoon.c | 2 +- hw/pci-host/apb.c | 2 +- hw/pci-host/prep.c | 3 +-- hw/pci-host/q35.c | 5 +++-- hw/pci/pci.c | 7 +++---- hw/ppc/spapr_pci.c | 2 +- include/hw/pci/pci.h | 4 +++- 7 files changed, 13 insertions(+), 12 deletions(-) diff --git a/hw/alpha/typhoon.c b/hw/alpha/typhoon.c index 5310006..62f7178 100644 --- a/hw/alpha/typhoon.c +++ b/hw/alpha/typhoon.c @@ -725,7 +725,7 @@ static const MemoryRegionIOMMUOps typhoon_iommu_ops = { .translate = typhoon_translate_iommu, }; -static AddressSpace *typhoon_pci_dma_iommu(PCIBus *bus, void *opaque, int devfn) +static AddressSpace *typhoon_pci_dma_iommu(PCIDevice *dev, void *opaque) { TyphoonState *s = opaque; return &s->pchip.iommu_as; diff --git a/hw/pci-host/apb.c b/hw/pci-host/apb.c index f573875..06b6daa 100644 --- a/hw/pci-host/apb.c +++ b/hw/pci-host/apb.c @@ -198,7 +198,7 @@ static inline void pbm_clear_request(APBState *s, unsigned int irq_num) s->irq_request = NO_IRQ_REQUEST; } -static AddressSpace *pbm_pci_dma_iommu(PCIBus *bus, void *opaque, int devfn) +static AddressSpace *pbm_pci_dma_iommu(PCIDevice *dev, void *opaque) { IOMMUState *is = opaque; diff --git a/hw/pci-host/prep.c b/hw/pci-host/prep.c index 1de3681..ba997a8 100644 --- a/hw/pci-host/prep.c +++ b/hw/pci-host/prep.c @@ -194,8 +194,7 @@ static void raven_set_irq(void *opaque, int irq_num, int level) qemu_set_irq(pic[irq_num] , level); } -static AddressSpace *raven_pcihost_set_iommu(PCIBus *bus, void *opaque, - int devfn) +static AddressSpace *raven_pcihost_set_iommu(PCIDevice *dev, void *opaque) { PREPPCIState *s = opaque; diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c index b20bad8..c087c96 100644 --- a/hw/pci-host/q35.c +++ b/hw/pci-host/q35.c @@ -347,11 +347,12 @@ static void mch_reset(DeviceState *qdev) mch_update(mch); } -static AddressSpace *q35_host_dma_iommu(PCIBus *bus, void *opaque, int devfn) +static AddressSpace *q35_host_dma_iommu(PCIDevice *dev, void *opaque) { IntelIOMMUState *s = opaque; VTDAddressSpace **pvtd_as; - int bus_num = pci_bus_num(bus); + int bus_num = pci_bus_num(dev->bus); + int devfn = dev->devfn; assert(0 <= bus_num && bus_num <= VTD_PCI_BUS_MAX); assert(0 <= devfn && devfn <= VTD_PCI_DEVFN_MAX); diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 6ce75aa..b077173 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -808,7 +808,6 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus, PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(pci_dev); PCIConfigReadFunc *config_read = pc->config_read; PCIConfigWriteFunc *config_write = pc->config_write; - AddressSpace *dma_as; if (devfn < 0) { for(devfn = bus->devfn_min ; devfn < ARRAY_SIZE(bus->devices); @@ -827,11 +826,11 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus, pci_dev->bus = bus; pci_dev->devfn = devfn; - dma_as = pci_device_iommu_address_space(pci_dev); + pci_dev->dma_as = pci_device_iommu_address_space(pci_dev); memory_region_init_alias(&pci_dev->bus_master_enable_region, OBJECT(pci_dev), "bus master", - dma_as->root, 0, memory_region_size(dma_as->root)); + pci_dev->dma_as->root, 0, memory_region_size(pci_dev->dma_as->root)); memory_region_set_enabled(&pci_dev->bus_master_enable_region, false); address_space_init(&pci_dev->bus_master_as, &pci_dev->bus_master_enable_region, name); @@ -2280,7 +2279,7 @@ AddressSpace *pci_device_iommu_address_space(PCIDevice *dev) PCIBus *bus = PCI_BUS(dev->bus); if (bus->iommu_fn) { - return bus->iommu_fn(bus, bus->iommu_opaque, dev->devfn); + return bus->iommu_fn(dev, bus->iommu_opaque); } if (bus->parent_dev) { diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c index ad0da7f..656fae3 100644 --- a/hw/ppc/spapr_pci.c +++ b/hw/ppc/spapr_pci.c @@ -472,7 +472,7 @@ static const MemoryRegionOps spapr_msi_ops = { /* * PHB PCI device */ -static AddressSpace *spapr_pci_dma_iommu(PCIBus *bus, void *opaque, int devfn) +static AddressSpace *spapr_pci_dma_iommu(PCIDevice *dev, void *opaque) { sPAPRPHBState *phb = opaque; diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index c352c7b..4bcf151 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -242,6 +242,7 @@ struct PCIDevice { char name[64]; PCIIORegion io_regions[PCI_NUM_REGIONS]; AddressSpace bus_master_as; + AddressSpace *dma_as; MemoryRegion bus_master_enable_region; /* do not access the following fields */ @@ -408,7 +409,8 @@ int pci_parse_devaddr(const char *addr, int *domp, int *busp, void pci_device_deassert_intx(PCIDevice *dev); -typedef AddressSpace *(*PCIIOMMUFunc)(PCIBus *, void *, int); +typedef AddressSpace *(*PCIIOMMUFunc)(PCIDevice *, void *); +void pci_set_dma_address_space(AddressSpace *dma_address_space); AddressSpace *pci_device_iommu_address_space(PCIDevice *dev); void pci_setup_iommu(PCIBus *bus, PCIIOMMUFunc fn, void *opaque); -- 1.9.0