PCI: pciehp: Iterate over all devices in slot, not functions 0-7
authorYijing Wang <wangyijing@huawei.com>
Tue, 15 Jan 2013 03:12:19 +0000 (11:12 +0800)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 25 Jan 2013 16:21:10 +0000 (09:21 -0700)
commitba518e3c177547dfebf7fa7252cea0c850e7ce25
treed4095f6395b8159a8301ee155ce81a5a33f9193b
parentb1bd58e448f28531207124eea3fd43b81d6f8d06
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>
drivers/pci/hotplug/pciehp_pci.c