From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:58014) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1FZS-0006iy-2A for qemu-devel@nongnu.org; Tue, 14 Aug 2012 07:46:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T1FZP-00005n-IR for qemu-devel@nongnu.org; Tue, 14 Aug 2012 07:46:01 -0400 Message-ID: <502A3A71.20908@suse.de> Date: Tue, 14 Aug 2012 13:45:53 +0200 From: Alexander Graf MIME-Version: 1.0 References: <1344391839-2006-1-git-send-email-david@gibson.dropbear.id.au> <1344391839-2006-7-git-send-email-david@gibson.dropbear.id.au> In-Reply-To: <1344391839-2006-7-git-send-email-david@gibson.dropbear.id.au> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 06/10] pseries: Export find_phb() utility function for PCI code List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson Cc: Alexey Kardashevskiy , aliguori@us.ibm.com, qemu-ppc@nongnu.org, qemu-devel@nongnu.org On 08/08/2012 04:10 AM, David Gibson wrote: > From: Alexey Kardashevskiy > > The pseries PCI code makes use of an internal find_dev() function which > locates a PCIDevice * given a (platform specific) bus ID and device > address. Internally this needs to first locate the host bridge on which > the device resides based on the bus ID. This patch exposes that host > bridge lookup as a separate function, which we will need later in the MSI > and VFIO code. > > Signed-off-by: Alexey Kardashevskiy > Signed-off-by: David Gibson > --- > hw/spapr_pci.c | 32 ++++++++++++++++++++++---------- > 1 file changed, 22 insertions(+), 10 deletions(-) > > diff --git a/hw/spapr_pci.c b/hw/spapr_pci.c > index fcc358e..842068f 100644 > --- a/hw/spapr_pci.c > +++ b/hw/spapr_pci.c > @@ -29,27 +29,39 @@ > #include "hw/spapr_pci.h" > #include "exec-memory.h" > #include > +#include "trace.h" trace.h? Alex > > #include "hw/pci_internals.h" > > -static PCIDevice *find_dev(sPAPREnvironment *spapr, > - uint64_t buid, uint32_t config_addr) > +static sPAPRPHBState *find_phb(sPAPREnvironment *spapr, uint64_t buid) > { > - int devfn = (config_addr >> 8) & 0xFF; > sPAPRPHBState *phb; > > QLIST_FOREACH(phb, &spapr->phbs, list) { > - BusChild *kid; > - > if (phb->buid != buid) { > continue; > } > + return phb; > + } > + > + return NULL; > +} > + > +static PCIDevice *find_dev(sPAPREnvironment *spapr, uint64_t buid, > + uint32_t config_addr) > +{ > + sPAPRPHBState *phb = find_phb(spapr, buid); > + BusChild *kid; > + int devfn = (config_addr >> 8) & 0xFF; > + > + if (!phb) { > + return NULL; > + } > > - QTAILQ_FOREACH(kid, &phb->host_state.bus->qbus.children, sibling) { > - PCIDevice *dev = (PCIDevice *)kid->child; > - if (dev->devfn == devfn) { > - return dev; > - } > + QTAILQ_FOREACH(kid, &phb->host_state.bus->qbus.children, sibling) { > + PCIDevice *dev = (PCIDevice *)kid->child; > + if (dev->devfn == devfn) { > + return dev; > } > } >