Hi Bjorn, Arnd and Marc, This is the updated version of my first try to prepare for virtual PCI support on Hyper-V ARM64: https://lore.kernel.org/lkml/20210319161956.2838291-1-boqun.feng@xxxxxxxxx/ , thanks a lot for your suggestions in the previous one. This is still more an RFC, and trying to see what I'm on the correct direction. The basic problem we need to resolve is that ARM64 is an arch with PCI_DOMAINS_GENERIC=y, so the bus sysdata is pci_config_window. However, Hyper-V PCI provides a paravirtualized PCI interface, so there is no actual pci_config_window for a PCI host bridge, so no information can be retrieve from the pci_config_window of a Hyper-V virtual PCI bus. This patchset mainly handle three things: 1) PCI domain number. As suggested by Bjorn and Arnd, I introduce a member in pci_host_bridge, and Hyper-V can use it to set up the correct PCI domain number for the bus, while others remain the same behavior. 2) MSI irq_domain. As suggested by Arnd, I use the GENERIC_MSI_IRQ_DOMAIN's dev_{set,get}_msi_domain() to allow Hyper-V set up the msi domain using generic code. 3) pcibios_root_bridge_prepare(). This one is new, PCI core will call this during host bridge register, and it will access the pci_config_window, luckily the only field it accesses it the parent field, and I change the ARM64's behavior to treat the acpi device as NULL if pci_config_window::parent is NULL, so that Hyper-V can provide a all-zeroed pci_config_window. With the above, we could enable the virtual PCI on Hyper-V ARM64 guest with other code under development. Comments and suggestions are welcome. Regards, Boqun Arnd Bergmann (1): PCI: hv: Generify PCI probing Boqun Feng (6): PCI: Introduce pci_host_bridge::domain_nr PCI: Allow msi domain set-up at host probing time PCI: hv: Use pci_host_bridge::domain_nr for PCI domain PCI: hv: Set up msi domain at bridge probing time PCI: arm64: Allow pci_config_window::parent to be NULL PCI: hv: Turn on the host bridge probing on ARM64 arch/arm/kernel/bios32.c | 2 + arch/arm/mach-dove/pcie.c | 2 + arch/arm/mach-mv78xx0/pcie.c | 2 + arch/arm/mach-orion5x/pci.c | 2 + arch/arm64/kernel/pci.c | 5 +- arch/mips/pci/pci-legacy.c | 2 + arch/mips/pci/pci-xtalk-bridge.c | 2 + drivers/pci/controller/pci-ftpci100.c | 2 + drivers/pci/controller/pci-hyperv.c | 90 +++++++++++++++------------ drivers/pci/controller/pci-mvebu.c | 2 + drivers/pci/pci.c | 4 +- drivers/pci/probe.c | 12 +++- include/linux/pci.h | 11 +++- 13 files changed, 89 insertions(+), 49 deletions(-) -- 2.30.2