From patchwork Wed Aug 7 08:21:25 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexey Kardashevskiy X-Patchwork-Id: 265391 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 999332C0224 for ; Wed, 7 Aug 2013 18:22:48 +1000 (EST) Received: from localhost ([::1]:57385 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V6z14-0002GH-A4 for incoming@patchwork.ozlabs.org; Wed, 07 Aug 2013 04:22:46 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59046) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V6z0O-00025g-0l for qemu-devel@nongnu.org; Wed, 07 Aug 2013 04:22:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V6z0A-0007NI-NX for qemu-devel@nongnu.org; Wed, 07 Aug 2013 04:22:03 -0400 Received: from mail-pa0-f42.google.com ([209.85.220.42]:39617) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V6z0A-0007NA-Gu for qemu-devel@nongnu.org; Wed, 07 Aug 2013 04:21:50 -0400 Received: by mail-pa0-f42.google.com with SMTP id lj1so1884126pab.29 for ; Wed, 07 Aug 2013 01:21:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=B442I0xtdP5ku2TZh9jToUggzT33hRc6Ax6vwvUnk2A=; b=g6hk4FhqH1bi5tRQavD1ANsiGXRoJYHGO13PJ7Xc6U4zoQC6mL2X3l2Ncb8RFrT1ZX 8tFEG4Xm6n1AKi1RqbFrTlomShh3mEGMONcICfTz2cdxoPSwKG2T3xaBDJMM7b/kW+9V VdTTarDqEirup00i2vNu9auaBDrWp3JheljDcUGFOJvx+R3XUDUL9fqe5IjgYXZLqduk 3jlrtSkVUYcDFnuewjqyLMdqnN2+Im5jutsICeltGmMSoRERE5NyBm3pMud/XaOIojXx 1vOawD9Nl19TtePEnRPxlY2f1Dim6JphexZ7tHFCzYxKyqyQcqyIMfK9hgB3+swAwFVk E1cg== X-Gm-Message-State: ALoCoQn3asGCQqGRpOucckaQoHr1oeUaGnpHSwdQGpT8E1W4Xba4aJGTI+P4O7ECDhuIdgpGziVf X-Received: by 10.66.192.8 with SMTP id hc8mr3107719pac.66.1375863709816; Wed, 07 Aug 2013 01:21:49 -0700 (PDT) Received: from ka1.ozlabs.ibm.com (ibmaus65.lnk.telstra.net. [165.228.126.9]) by mx.google.com with ESMTPSA id 7sm8957160paf.22.2013.08.07.01.21.43 for (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 07 Aug 2013 01:21:47 -0700 (PDT) From: Alexey Kardashevskiy To: qemu-devel@nongnu.org Date: Wed, 7 Aug 2013 18:21:25 +1000 Message-Id: <1375863692-12207-2-git-send-email-aik@ozlabs.ru> X-Mailer: git-send-email 1.8.3.2 In-Reply-To: <1375863692-12207-1-git-send-email-aik@ozlabs.ru> References: <1375863692-12207-1-git-send-email-aik@ozlabs.ru> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.85.220.42 Cc: Anthony Liguori , "Michael S . Tsirkin" , aik@ozlabs.ru, Alexander Graf , Alex Williamson , qemu-ppc@nongnu.org, Paolo Bonzini , Paul Mackerras , David Gibson Subject: [Qemu-devel] [PATCH 1/8] pci: Introduce helper to retrieve a PCI device's DMA address space X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: David Gibson A PCI device's DMA address space (possibly an IOMMU) is returned by a method on the PCIBus. At the moment that only has one caller, so the method is simply open coded. We'll need another caller for VFIO, so this patch introduces a helper/wrapper function. Signed-off-by: David Gibson --- hw/pci/pci.c | 9 ++++++++- include/hw/pci/pci.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 4bce3e7..3cea25f 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -813,7 +813,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus, pci_dev->bus = bus; if (bus->iommu_fn) { - dma_as = bus->iommu_fn(bus, bus->iommu_opaque, devfn); + dma_as = pci_iommu_as(pci_dev); } else { /* FIXME: inherit memory region from bus creator */ dma_as = &address_space_memory; @@ -2248,6 +2248,13 @@ static void pci_device_class_init(ObjectClass *klass, void *data) k->props = pci_props; } +AddressSpace *pci_iommu_as(PCIDevice *dev) +{ + PCIBus *bus = PCI_BUS(dev->bus); + + return bus->iommu_fn(bus, bus->iommu_opaque, dev->devfn); +} + void pci_setup_iommu(PCIBus *bus, PCIIOMMUFunc fn, void *opaque) { bus->iommu_fn = fn; diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index b6ad9e4..614f809 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -407,6 +407,7 @@ void pci_device_deassert_intx(PCIDevice *dev); typedef AddressSpace *(*PCIIOMMUFunc)(PCIBus *, void *, int); +AddressSpace *pci_iommu_as(PCIDevice *dev); void pci_setup_iommu(PCIBus *bus, PCIIOMMUFunc fn, void *opaque); static inline void