linux/drivers/pci/hotplug
Yijing Wang ba518e3c17 PCI: pciehp: Iterate over all devices in slot, not functions 0-7
Currently, we enumerate devices in a slot with pci_scan_slot(), then
iterate through all the devices we found by looking for functions 0-7.  But
that's wrong for ARI devices, which may have function numbers up to 255.

This means that when we hot-add an ARI device, pciehp only initializes
functions 0-7, and other functions don't work correctly.  Additionally, if
we hot-remove the device, pciehp only removes functions 0-7, leaving stale
pci_dev structures for any other functions.

This patch fixes the problem by iterating over devices in a slot by using
the upstream bridge's "bus->devices" list instead.

[bhelgaas: changelog]
Signed-off-by: Yijing Wang <wangyijing@huawei.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
2013-01-25 09:21:10 -07:00
..
acpi_pcihp.c module_param: make bool parameters really bool (drivers & misc) 2012-01-13 09:32:20 +10:30
acpiphp_core.c PCI: acpiphp: merge acpiphp_debug and debug 2012-07-10 17:02:37 -06:00
acpiphp_glue.c Merge branch 'pci/jiang-acpiphp' into next 2012-09-24 16:36:48 -06:00
acpiphp_ibm.c module_param: make bool parameters really bool (drivers & misc) 2012-01-13 09:32:20 +10:30
acpiphp.h PCI: acpiphp: merge acpiphp_debug and debug 2012-07-10 17:02:37 -06:00
cpci_hotplug_core.c PCI: hotplug: ensure a consistent return value in error case 2012-07-16 09:25:56 -06:00
cpci_hotplug_pci.c PCI: cpci_hotplug: use generic pci_hp_add_bridge() 2012-06-13 15:42:26 -06:00
cpci_hotplug.h PCI: cpci_hotplug: stop managing hotplug_slot->name 2008-10-22 16:42:39 -07:00
cpcihp_generic.c PCI/cpcihp: Use hotplug-safe pci_get_domain_bus_and_slot() 2012-09-12 14:13:59 -06:00
cpcihp_zt5550.c PCI: Remove __dev* markings 2012-11-28 13:16:47 -08:00
cpcihp_zt5550.h
cpqphp_core.c PCI: hotplug: ensure a consistent return value in error case 2012-07-16 09:25:56 -06:00
cpqphp_ctrl.c PCI: cpqphp: Remove unreachable path 2012-09-10 16:45:41 -06:00
cpqphp_nvram.c PCI Hotplug: cpqphp: fix comment style 2009-06-11 12:04:08 -07:00
cpqphp_nvram.h
cpqphp_pci.c PCI: cpqhp: use generic pci_hp_add_bridge() 2012-06-13 15:42:26 -06:00
cpqphp_sysfs.c drivers: autoconvert trivial BKL users to private mutex 2010-10-05 15:01:04 +02:00
cpqphp.h PCI: Make current and maximum bus speeds part of the PCI core 2010-02-22 16:15:17 -08:00
ibmphp_core.c PCI changes for the 3.6 merge window: 2012-07-24 16:17:07 -07:00
ibmphp_ebda.c pci: hotplug: Fix typo in pci 2012-07-24 12:59:30 +02:00
ibmphp_hpc.c PCI hotplug: ibmphp-hpc: semaphore cleanup 2010-10-15 13:09:48 -07:00
ibmphp_pci.c pci: hotplug: Fix typo in pci 2012-07-24 12:59:30 +02:00
ibmphp_res.c ibmphp: Rename add_range() to add_bus_range() to avoid conflict 2010-02-10 17:45:09 -08:00
ibmphp.h PCI: ibmphp: stop managing hotplug_slot->name 2008-10-22 16:42:41 -07:00
Kconfig s390/pci: PCI hotplug support via SCLP 2012-11-30 17:47:25 +01:00
Makefile s390/pci: PCI hotplug support via SCLP 2012-11-30 17:47:25 +01:00
pci_hotplug_core.c module_param: make bool parameters really bool (drivers & misc) 2012-01-13 09:32:20 +10:30
pciehp_acpi.c PCI/pciehp: Use PCI Express Capability accessors 2012-08-23 10:11:11 -06:00
pciehp_core.c PCI: pciehp: Always implement resume, regardless of pciehp_force param 2012-09-07 17:06:54 -06:00
pciehp_ctrl.c PCI: pciehp: Handle push button event asynchronously 2011-12-05 10:21:47 -08:00
pciehp_hpc.c PCI/pciehp: Use PCI Express Capability accessors 2012-08-23 10:11:11 -06:00
pciehp_pci.c PCI: pciehp: Iterate over all devices in slot, not functions 0-7 2013-01-25 09:21:10 -07:00
pciehp.h PCI: pciehp: remove unused pciehp_get_max_lnk_width(), pciehp_get_cur_lnk_width() 2012-07-12 15:41:32 -06:00
pcihp_skeleton.c PCI: hotplug: ensure a consistent return value in error case 2012-07-16 09:25:56 -06:00
pcihp_slot.c PCI/hotplug: Use PCI Express Capability accessors 2012-08-23 10:11:11 -06:00
rpadlpar_core.c powerpc/eeh: Remove EEH PE for normal PCI hotplug 2012-09-18 15:32:23 +10:00
rpadlpar_sysfs.c PCI: introduce pci_slot 2008-06-10 14:37:03 -07:00
rpadlpar.h
rpaphp_core.c module_param: make bool parameters really bool (drivers & misc) 2012-01-13 09:32:20 +10:30
rpaphp_pci.c PCI hotplug: rpaphp: make debug var unique 2008-10-20 10:54:27 -07:00
rpaphp_slot.c headers: kobject.h redux 2011-01-10 08:51:44 -08:00
rpaphp.h module_param: make bool parameters really bool (drivers & misc) 2012-01-13 09:32:20 +10:30
s390_pci_hpc.c s390/pci: PCI hotplug support via SCLP 2012-11-30 17:47:25 +01:00
sgi_hotplug.c PCI: sgihp: use generic pci_hp_add_bridge() 2012-06-13 15:42:27 -06:00
shpchp_core.c PCI: hotplug: ensure a consistent return value in error case 2012-07-16 09:25:56 -06:00
shpchp_ctrl.c PCI: shpchp: remove dead code 2012-06-20 17:28:53 -06:00
shpchp_hpc.c PCI hotplug: shpchp: don't blindly claim non-AMD 0x7450 device IDs 2011-11-14 09:43:14 -08:00
shpchp_pci.c PCI: shpchp: use generic pci_hp_add_bridge() 2012-06-13 15:42:26 -06:00
shpchp_sysfs.c PCI: replace struct pci_bus secondary/subordinate with busn_res 2012-06-13 15:42:22 -06:00
shpchp.h module_param: make bool parameters really bool (drivers & misc) 2012-01-13 09:32:20 +10:30