From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=54720 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OIkoH-0005Q2-Ca for qemu-devel@nongnu.org; Sun, 30 May 2010 11:52:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OIkoG-0003dO-1G for qemu-devel@nongnu.org; Sun, 30 May 2010 11:52:21 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42906) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OIkoF-0003dG-RJ for qemu-devel@nongnu.org; Sun, 30 May 2010 11:52:20 -0400 Date: Sun, 30 May 2010 18:48:03 +0300 From: "Michael S. Tsirkin" Message-ID: <20100530154803.GA30048@redhat.com> References: <20100528093046.GB13840@valinux.co.jp> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20100528093046.GB13840@valinux.co.jp> Subject: [Qemu-devel] Re: [PATCH v2] pci-hotplug: make them aware of pci domain. List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Isaku Yamahata Cc: qemu-devel@nongnu.org On Fri, May 28, 2010 at 06:30:46PM +0900, Isaku Yamahata wrote: > add helper function which converts root bus to pci domain. > make them aware of pci domain. > > Signed-off-by: Isaku Yamahata Doesn't seem to apply to master. > --- > Changes: V1 -> V2 > - removed pci_find_bus() > - renamed pci_find_bus_by_bus() to pci_find_bus() > - add abort() > --- > hw/pci-hotplug.c | 7 ++++--- > hw/pci.c | 22 +++++++++++++++++++++- > hw/pci.h | 1 + > 3 files changed, 26 insertions(+), 4 deletions(-) > > diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c > index 37ac015..a8f3df1 100644 > --- a/hw/pci-hotplug.c > +++ b/hw/pci-hotplug.c > @@ -124,7 +124,7 @@ void drive_hot_add(Monitor *mon, const QDict *qdict) > if (pci_read_devaddr(mon, pci_addr, &dom, &pci_bus, &slot)) { > goto err; > } > - dev = pci_find_device(pci_find_root_bus(0), pci_bus, slot, 0); > + dev = pci_find_device(pci_find_root_bus(dom), pci_bus, slot, 0); > if (!dev) { > monitor_printf(mon, "no pci device with address %s\n", pci_addr); > goto err; > @@ -252,7 +252,8 @@ void pci_device_hot_add(Monitor *mon, const QDict *qdict) > > if (dev) { > monitor_printf(mon, "OK domain %d, bus %d, slot %d, function %d\n", > - 0, pci_bus_num(dev->bus), PCI_SLOT(dev->devfn), > + pci_find_domain(dev->bus), > + pci_bus_num(dev->bus), PCI_SLOT(dev->devfn), > PCI_FUNC(dev->devfn)); > } else > monitor_printf(mon, "failed to add %s\n", opts); > @@ -269,7 +270,7 @@ int pci_device_hot_remove(Monitor *mon, const char *pci_addr) > return -1; > } > > - d = pci_find_device(pci_find_root_bus(0), bus, slot, 0); > + d = pci_find_device(pci_find_root_bus(dom), bus, slot, 0); > if (!d) { > monitor_printf(mon, "slot %d empty\n", slot); > return -1; > diff --git a/hw/pci.c b/hw/pci.c > index 39a6206..f046029 100644 > --- a/hw/pci.c > +++ b/hw/pci.c > @@ -200,6 +200,26 @@ PCIBus *pci_find_root_bus(int domain) > return NULL; > } > > +int pci_find_domain(const PCIBus *bus) > +{ > + PCIDevice *d; > + struct PCIHostBus *host; > + > + /* obtain root bus */ > + while ((d = bus->parent_dev) != NULL) { > + bus = d->bus; > + } > + > + QLIST_FOREACH(host, &host_buses, next) { > + if (host->bus == bus) { > + return host->domain; > + } > + } > + > + abort(); /* should not be reached */ > + return -1; > +} > + > void pci_bus_new_inplace(PCIBus *bus, DeviceState *parent, > const char *name, int devfn_min) > { > @@ -505,7 +525,7 @@ PCIBus *pci_get_bus_devfn(int *devfnp, const char *devaddr) > } > > *devfnp = slot << 3; > - return pci_find_bus(pci_find_root_bus(0), bus); > + return pci_find_bus(pci_find_root_bus(dom), bus); > } > > static void pci_init_cmask(PCIDevice *dev) > diff --git a/hw/pci.h b/hw/pci.h > index b803593..3a15bd4 100644 > --- a/hw/pci.h > +++ b/hw/pci.h > @@ -218,6 +218,7 @@ PCIDevice *pci_nic_init_nofail(NICInfo *nd, const char *default_model, > int pci_bus_num(PCIBus *s); > void pci_for_each_device(PCIBus *bus, int bus_num, void (*fn)(PCIBus *bus, PCIDevice *d)); > PCIBus *pci_find_root_bus(int domain); > +int pci_find_domain(const PCIBus *bus); > PCIBus *pci_find_bus(PCIBus *bus, int bus_num); > PCIDevice *pci_find_device(PCIBus *bus, int bus_num, int slot, int function); > PCIBus *pci_get_bus_devfn(int *devfnp, const char *devaddr); > -- > 1.6.6.1 > > > > -- > yamahata