PCI: generic: Allow multiple hosts with different map_bus() methods
authorDavid Daney <david.daney@cavium.com>
Thu, 8 Oct 2015 15:15:10 +0000 (10:15 -0500)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 8 Oct 2015 15:15:10 +0000 (10:15 -0500)
commit9a28033753ca9e86593e15050c7ae02fbc03f9ae
tree9febdc44f45e6669e4579c432503a82063090b5f
parent6701212e86398622a05b85d87391646bf0e81bfc
PCI: generic: Allow multiple hosts with different map_bus() methods

The generic driver kept a global struct pci_ops ("gen_pci_ops") which it
patched with the .map_bus() method appropriate for the bus device.  This is
a problem when we have two different types of bus devices: the .map_bus()
method for the last device probed clobbers the method for previous devices.
The result is that only the last bus device probed has the correct
.map_bus(), and the others fail.

Move the struct pci_ops into the bus-specific structure and initialize a
pointer to it when the bus device is probed.

Signed-off-by: David Daney <david.daney@cavium.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Will Deacon <will.deacon@arm.com>
drivers/pci/host/pci-host-generic.c