I've noticed that pci_bus_new*() and pci_register_bus() require 'parent' to be a PCI_HOST_BRIDGE object, but this is not clear from the function signatures.
This series implements two changes in the PCI code: 1) Replace DeviceState with PCIHostState on functions that already require a PCI_HOST_BRIDGE argument. Makes the functions harder to misuse. 2) Move PCIHostState::bus initialization inside pci_bus_new*(), to avoid code duplication and make sure the field will be always initialized consistently. Eduardo Habkost (7): pci: Change pci_host_bus_register() parameter to PCIHostState pci: Change pci_bus_init() 'parent' parameter to PCIHostState pci: Change pci_bus_new*() parameter to PCIHostState pci: Change pci_register_bus() 'parent' parameter to PCIHostState pci: Set phb->bus inside pci_register_bus() pci: Set phb->bus inside pci_bus_new() pci: Set phb->bus inside pci_bus_new_inplace() include/hw/pci/pci.h | 17 ++++++++-------- hw/alpha/typhoon.c | 10 +++++----- hw/mips/gt64xxx_pci.c | 9 +++------ hw/pci-bridge/pci_expander_bridge.c | 15 +++++++------- hw/pci-host/apb.c | 7 ++----- hw/pci-host/bonito.c | 7 +++---- hw/pci-host/gpex.c | 5 ++--- hw/pci-host/grackle.c | 9 ++------- hw/pci-host/piix.c | 3 +-- hw/pci-host/ppce500.c | 8 ++++---- hw/pci-host/prep.c | 4 +--- hw/pci-host/q35.c | 6 +++--- hw/pci-host/uninorth.c | 18 ++++++----------- hw/pci-host/versatile.c | 3 +-- hw/pci-host/xilinx-pcie.c | 6 +++--- hw/pci/pci.c | 40 ++++++++++++++++++------------------- hw/ppc/ppc4xx_pci.c | 8 ++++---- hw/ppc/spapr_pci.c | 10 +++++----- hw/s390x/s390-pci-bus.c | 10 +++++----- hw/sh4/sh_pci.c | 9 +++------ 20 files changed, 89 insertions(+), 115 deletions(-) -- 2.11.0.259.g40922b1