From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: David Gibson <david@gibson.dropbear.id.au>
Subject: [Qemu-devel] [PULL v2 14/21] pci: Use helper to find device's root bus in pci_find_domain()
Date: Tue, 25 Jun 2013 18:41:33 +0300 [thread overview]
Message-ID: <1372174719-6564-15-git-send-email-mst@redhat.com> (raw)
In-Reply-To: <1372174719-6564-1-git-send-email-mst@redhat.com>
From: David Gibson <david@gibson.dropbear.id.au>
Currently pci_find_domain() performs two functions - it locates the PCI
root bus above the given bus, then looks up that root bus's domain number.
This patch adds a helper function to perform the first task, finding the
root bus for a given PCI device. This is then used in pci_find_domain().
This changes pci_find_domain()'s signature slightly, taking a PCIDevice
instead of a PCIBus - since all callers passed something of the form
dev->bus, this simplifies things slightly.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
hw/pci/pci-hotplug-old.c | 2 +-
hw/pci/pci.c | 20 +++++++++++++-------
hw/pci/pcie_aer.c | 3 +--
include/hw/pci/pci.h | 3 ++-
4 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/hw/pci/pci-hotplug-old.c b/hw/pci/pci-hotplug-old.c
index 7a47d6b..37e0720 100644
--- a/hw/pci/pci-hotplug-old.c
+++ b/hw/pci/pci-hotplug-old.c
@@ -276,7 +276,7 @@ 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",
- pci_find_domain(dev->bus),
+ pci_find_domain(dev),
pci_bus_num(dev->bus), PCI_SLOT(dev->devfn),
PCI_FUNC(dev->devfn));
} else
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index b8c6140..bab992d 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -259,18 +259,24 @@ PCIBus *pci_find_primary_bus(void)
return NULL;
}
-int pci_find_domain(const PCIBus *bus)
+PCIBus *pci_device_root_bus(const PCIDevice *d)
{
- PCIDevice *d;
- struct PCIHostBus *host;
+ PCIBus *bus = d->bus;
- /* obtain root bus */
while ((d = bus->parent_dev) != NULL) {
bus = d->bus;
}
+ return bus;
+}
+
+int pci_find_domain(const PCIDevice *dev)
+{
+ const PCIBus *rootbus = pci_device_root_bus(dev);
+ struct PCIHostBus *host;
+
QLIST_FOREACH(host, &host_buses, next) {
- if (host->bus == bus) {
+ if (host->bus == rootbus) {
return host->domain;
}
}
@@ -2000,7 +2006,7 @@ int pci_add_capability(PCIDevice *pdev, uint8_t cap_id,
fprintf(stderr, "ERROR: %04x:%02x:%02x.%x "
"Attempt to add PCI capability %x at offset "
"%x overlaps existing capability %x at offset %x\n",
- pci_find_domain(pdev->bus), pci_bus_num(pdev->bus),
+ pci_find_domain(pdev), pci_bus_num(pdev->bus),
PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn),
cap_id, offset, overlapping_cap, i);
return -EINVAL;
@@ -2155,7 +2161,7 @@ static char *pcibus_get_dev_path(DeviceState *dev)
path[path_len] = '\0';
/* First field is the domain. */
- s = snprintf(domain, sizeof domain, "%04x:00", pci_find_domain(d->bus));
+ s = snprintf(domain, sizeof domain, "%04x:00", pci_find_domain(d));
assert(s == domain_len);
memcpy(path, domain, domain_len);
diff --git a/hw/pci/pcie_aer.c b/hw/pci/pcie_aer.c
index 1ce72ce..06f77ac 100644
--- a/hw/pci/pcie_aer.c
+++ b/hw/pci/pcie_aer.c
@@ -1022,8 +1022,7 @@ int do_pcie_aer_inject_error(Monitor *mon,
*ret_data = qobject_from_jsonf("{'id': %s, "
"'domain': %d, 'bus': %d, 'devfn': %d, "
"'ret': %d}",
- id,
- pci_find_domain(dev->bus),
+ id, pci_find_domain(dev),
pci_bus_num(dev->bus), dev->devfn,
ret);
assert(*ret_data);
diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h
index c26d704..7376b9e 100644
--- a/include/hw/pci/pci.h
+++ b/include/hw/pci/pci.h
@@ -391,7 +391,8 @@ void pci_for_each_device(PCIBus *bus, int bus_num,
void (*fn)(PCIBus *bus, PCIDevice *d, void *opaque),
void *opaque);
PCIBus *pci_find_primary_bus(void);
-int pci_find_domain(const PCIBus *bus);
+PCIBus *pci_device_root_bus(const PCIDevice *d);
+int pci_find_domain(const PCIDevice *dev);
PCIDevice *pci_find_device(PCIBus *bus, int bus_num, uint8_t devfn);
int pci_qdev_find_device(const char *id, PCIDevice **pdev);
PCIBus *pci_get_bus_devfn(int *devfnp, const char *devaddr);
--
MST
next prev parent reply other threads:[~2013-06-25 15:40 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-25 15:40 [Qemu-devel] [PULL v2 00/21] pci,kvm,misc enhancements Michael S. Tsirkin
2013-06-25 15:40 ` [Qemu-devel] [PULL v2 01/21] range: add Range structure Michael S. Tsirkin
2013-06-25 15:40 ` [Qemu-devel] [PULL v2 03/21] pc: pass PCI hole ranges to Guests Michael S. Tsirkin
2013-06-25 15:40 ` [Qemu-devel] [PULL v2 04/21] pc_piix: cleanup init compat handling Michael S. Tsirkin
2013-06-25 15:40 ` [Qemu-devel] [PULL v2 05/21] e1000: cleanup process_tx_desc Michael S. Tsirkin
2013-06-25 15:41 ` [Qemu-devel] [PULL v2 06/21] kvm: zero-initialize KVM_SET_GSI_ROUTING input Michael S. Tsirkin
2013-06-25 15:41 ` [Qemu-devel] [PULL v2 07/21] kvm: skip system call when msi route is unchanged Michael S. Tsirkin
2013-06-25 15:41 ` [Qemu-devel] [PULL v2 08/21] MAINTAINERS: s/Marcelo/Paolo/ Michael S. Tsirkin
2013-06-25 15:41 ` [Qemu-devel] [PULL v2 09/21] pvpanic: initialization cleanup Michael S. Tsirkin
2013-06-25 15:41 ` [Qemu-devel] [PULL v2 10/21] pvpanic: fix fwcfg for big endian hosts Michael S. Tsirkin
2013-06-25 15:41 ` [Qemu-devel] [PULL v2 11/21] pci: Cleanup configuration for pci-hotplug.c Michael S. Tsirkin
2013-06-25 15:41 ` [Qemu-devel] [PULL v2 12/21] pci: Move pci_read_devaddr to pci-hotplug-old.c Michael S. Tsirkin
2013-06-25 15:41 ` [Qemu-devel] [PULL v2 13/21] pci: Abolish pci_find_root_bus() Michael S. Tsirkin
2013-06-25 15:41 ` Michael S. Tsirkin [this message]
2013-06-25 15:41 ` [Qemu-devel] [PULL v2 15/21] pci: Replace pci_find_domain() with more general pci_root_bus_path() Michael S. Tsirkin
2013-06-25 15:41 ` [Qemu-devel] [PULL v2 16/21] pci: Add root bus argument to pci_get_bus_devfn() Michael S. Tsirkin
2013-06-25 15:41 ` [Qemu-devel] [PULL v2 17/21] pci: Add root bus parameter to pci_nic_init() Michael S. Tsirkin
2013-06-25 15:41 ` [Qemu-devel] [PULL v2 18/21] pci: Simpler implementation of primary PCI bus Michael S. Tsirkin
2013-06-25 15:41 ` [Qemu-devel] [PULL v2 19/21] pci: Remove domain from PCIHostBus Michael S. Tsirkin
2013-06-25 15:41 ` [Qemu-devel] [PULL v2 20/21] pci: Fold host_buses list into PCIHostState functionality Michael S. Tsirkin
2013-06-25 15:41 ` [Qemu-devel] [PULL v2 21/21] net: add support of mac-programming over macvtap in QEMU side Michael S. Tsirkin
2013-06-28 13:45 ` Eric Blake
2013-06-25 15:42 ` [Qemu-devel] [PULL v2 02/21] pci: store PCI hole ranges in guestinfo structure Michael S. Tsirkin
2013-06-25 21:48 ` [Qemu-devel] [PULL v2 00/21] pci,kvm,misc enhancements Anthony Liguori
2013-06-28 14:06 ` Eric Blake
2013-06-28 17:26 ` Markus Armbruster
2013-06-28 17:25 ` Markus Armbruster
2013-06-28 17:44 ` Anthony Liguori
2013-07-04 8:59 ` Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1372174719-6564-15-git-send-email-mst@redhat.com \
--to=mst@redhat.com \
--cc=david@gibson.dropbear.id.au \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).