pci_find_primary_bus() only has one user, in pc_xen_hvm_init(). That's
inside the machine construction code, so it already has easy access to the
machine's primary PCI bus.
Get it directly, and thereby remove pci_find_primary_bus(). This removes
one of only a handful of users of the ugly pci_host_bridges global.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/i386/pc_piix.c | 8 ++------
hw/pci/pci.c | 16 ----------------
include/hw/pci/pci.h | 1 -
3 files changed, 2 insertions(+), 23 deletions(-)
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 5e47528993..2febd0e136 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -394,7 +394,7 @@ static void pc_xen_hvm_init_pci(MachineState *machine)
static void pc_xen_hvm_init(MachineState *machine)
{
- PCIBus *bus;
+ PCMachineState *pcms = PC_MACHINE(machine);
if (!xen_enabled()) {
error_report("xenfv machine requires the xen accelerator");
@@ -402,11 +402,7 @@ static void pc_xen_hvm_init(MachineState *machine)
}
pc_xen_hvm_init_pci(machine);
-
- bus = pci_find_primary_bus();
- if (bus != NULL) {
- pci_create_simple(bus, -1, "xen-platform");
- }
+ pci_create_simple(pcms->bus, -1, "xen-platform");
}
#endif
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index cd4d9d7ecd..ab76c4f3f1 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -324,22 +324,6 @@ static void pci_host_bus_register(DeviceState *host)
QLIST_INSERT_HEAD(&pci_host_bridges, host_bridge, next);
}
-PCIBus *pci_find_primary_bus(void)
-{
- PCIBus *primary_bus = NULL;
- PCIHostState *host;
-
- QLIST_FOREACH(host, &pci_host_bridges, next) {
- if (primary_bus) {
- /* We have multiple root buses, refuse to select a primary */
- return NULL;
- }
- primary_bus = host->bus;
- }
-
- return primary_bus;
-}
-
PCIBus *pci_device_root_bus(const PCIDevice *d)
{
PCIBus *bus = pci_get_bus(d);
diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h
index 50034157fd..867b1ee175 100644
--- a/include/hw/pci/pci.h
+++ b/include/hw/pci/pci.h
@@ -519,7 +519,6 @@ void pci_for_each_bus(PCIBus *bus,
pci_for_each_bus_depth_first(bus, NULL, fn, opaque);
}
-PCIBus *pci_find_primary_bus(void);
PCIBus *pci_device_root_bus(const PCIDevice *d);
const char *pci_root_bus_path(PCIDevice *dev);
PCIDevice *pci_find_device(PCIBus *bus, int bus_num, uint8_t devfn);
--
2.14.3
On 29/11/2017 10:46, David Gibson wrote:
> pci_find_primary_bus() only has one user, in pc_xen_hvm_init(). That's
> inside the machine construction code, so it already has easy access to the
> machine's primary PCI bus.
>
> Get it directly, and thereby remove pci_find_primary_bus(). This removes
> one of only a handful of users of the ugly pci_host_bridges global.
>
> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> ---
> hw/i386/pc_piix.c | 8 ++------
> hw/pci/pci.c | 16 ----------------
> include/hw/pci/pci.h | 1 -
> 3 files changed, 2 insertions(+), 23 deletions(-)
>
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 5e47528993..2febd0e136 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -394,7 +394,7 @@ static void pc_xen_hvm_init_pci(MachineState *machine)
>
> static void pc_xen_hvm_init(MachineState *machine)
> {
> - PCIBus *bus;
> + PCMachineState *pcms = PC_MACHINE(machine);
>
> if (!xen_enabled()) {
> error_report("xenfv machine requires the xen accelerator");
> @@ -402,11 +402,7 @@ static void pc_xen_hvm_init(MachineState *machine)
> }
>
> pc_xen_hvm_init_pci(machine);
> -
> - bus = pci_find_primary_bus();
> - if (bus != NULL) {
> - pci_create_simple(bus, -1, "xen-platform");
> - }
> + pci_create_simple(pcms->bus, -1, "xen-platform");
> }
> #endif
>
> diff --git a/hw/pci/pci.c b/hw/pci/pci.c
> index cd4d9d7ecd..ab76c4f3f1 100644
> --- a/hw/pci/pci.c
> +++ b/hw/pci/pci.c
> @@ -324,22 +324,6 @@ static void pci_host_bus_register(DeviceState *host)
> QLIST_INSERT_HEAD(&pci_host_bridges, host_bridge, next);
> }
>
> -PCIBus *pci_find_primary_bus(void)
> -{
> - PCIBus *primary_bus = NULL;
> - PCIHostState *host;
> -
> - QLIST_FOREACH(host, &pci_host_bridges, next) {
> - if (primary_bus) {
> - /* We have multiple root buses, refuse to select a primary */
> - return NULL;
> - }
> - primary_bus = host->bus;
> - }
> -
> - return primary_bus;
> -}
> -
> PCIBus *pci_device_root_bus(const PCIDevice *d)
> {
> PCIBus *bus = pci_get_bus(d);
> diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h
> index 50034157fd..867b1ee175 100644
> --- a/include/hw/pci/pci.h
> +++ b/include/hw/pci/pci.h
> @@ -519,7 +519,6 @@ void pci_for_each_bus(PCIBus *bus,
> pci_for_each_bus_depth_first(bus, NULL, fn, opaque);
> }
>
> -PCIBus *pci_find_primary_bus(void);
> PCIBus *pci_device_root_bus(const PCIDevice *d);
> const char *pci_root_bus_path(PCIDevice *dev);
> PCIDevice *pci_find_device(PCIBus *bus, int bus_num, uint8_t devfn);
>
Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>
Thanks,
Marcel
On Wed, Nov 29, 2017 at 07:46:28PM +1100, David Gibson wrote: > pci_find_primary_bus() only has one user, in pc_xen_hvm_init(). That's > inside the machine construction code, so it already has easy access to the > machine's primary PCI bus. > > Get it directly, and thereby remove pci_find_primary_bus(). This removes > one of only a handful of users of the ugly pci_host_bridges global. > > Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Reviewed-by: Peter Xu <peterx@redhat.com> -- Peter Xu
© 2016 - 2026 Red Hat, Inc.