diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-25 21:18:18 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-25 21:18:18 -0800 | 
| commit | 556f12f602ac0a18a82ca83e9f8e8547688fc633 (patch) | |
| tree | d4051f6dd57968c8e8e660ad117c5bedc2aa7e8e /drivers/pci/hotplug/cpci_hotplug_pci.c | |
| parent | fffddfd6c8e0c10c42c6e2cc54ba880fcc36ebbb (diff) | |
| parent | 018ba0a6efada61b9bc17500101d81c3d35807c2 (diff) | |
| download | olio-linux-3.10-556f12f602ac0a18a82ca83e9f8e8547688fc633.tar.xz olio-linux-3.10-556f12f602ac0a18a82ca83e9f8e8547688fc633.zip  | |
Merge tag 'pci-v3.9-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci
Pull PCI changes from Bjorn Helgaas:
 "Host bridge hotplug
    - Major overhaul of ACPI host bridge add/start (Rafael Wysocki, Yinghai Lu)
    - Major overhaul of PCI/ACPI binding (Rafael Wysocki, Yinghai Lu)
    - Split out ACPI host bridge and ACPI PCI device hotplug (Yinghai Lu)
    - Stop caching _PRT and make independent of bus numbers (Yinghai Lu)
  PCI device hotplug
    - Clean up cpqphp dead code (Sasha Levin)
    - Disable ARI unless device and upstream bridge support it (Yijing Wang)
    - Initialize all hot-added devices (not functions 0-7) (Yijing Wang)
  Power management
    - Don't touch ASPM if disabled (Joe Lawrence)
    - Fix ASPM link state management (Myron Stowe)
  Miscellaneous
    - Fix PCI_EXP_FLAGS accessor (Alex Williamson)
    - Disable Bus Master in pci_device_shutdown (Konstantin Khlebnikov)
    - Document hotplug resource and MPS parameters (Yijing Wang)
    - Add accessor for PCIe capabilities (Myron Stowe)
    - Drop pciehp suspend/resume messages (Paul Bolle)
    - Make pci_slot built-in only (not a module) (Jiang Liu)
    - Remove unused PCI/ACPI bind ops (Jiang Liu)
    - Removed used pci_root_bus (Bjorn Helgaas)"
* tag 'pci-v3.9-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (51 commits)
  PCI/ACPI: Don't cache _PRT, and don't associate them with bus numbers
  PCI: Fix PCI Express Capability accessors for PCI_EXP_FLAGS
  ACPI / PCI: Make pci_slot built-in only, not a module
  PCI/PM: Clear state_saved during suspend
  PCI: Use atomic_inc_return() rather than atomic_add_return()
  PCI: Catch attempts to disable already-disabled devices
  PCI: Disable Bus Master unconditionally in pci_device_shutdown()
  PCI: acpiphp: Remove dead code for PCI host bridge hotplug
  PCI: acpiphp: Create companion ACPI devices before creating PCI devices
  PCI: Remove unused "rc" in virtfn_add_bus()
  PCI: pciehp: Drop suspend/resume ENTRY messages
  PCI/ASPM: Don't touch ASPM if forcibly disabled
  PCI/ASPM: Deallocate upstream link state even if device is not PCIe
  PCI: Document MPS parameters pci=pcie_bus_safe, pci=pcie_bus_perf, etc
  PCI: Document hpiosize= and hpmemsize= resource reservation parameters
  PCI: Use PCI Express Capability accessor
  PCI: Introduce accessor to retrieve PCIe Capabilities Register
  PCI: Put pci_dev in device tree as early as possible
  PCI: Skip attaching driver in device_add()
  PCI: acpiphp: Keep driver loaded even if no slots found
  ...
Diffstat (limited to 'drivers/pci/hotplug/cpci_hotplug_pci.c')
| -rw-r--r-- | drivers/pci/hotplug/cpci_hotplug_pci.c | 29 | 
1 files changed, 11 insertions, 18 deletions
diff --git a/drivers/pci/hotplug/cpci_hotplug_pci.c b/drivers/pci/hotplug/cpci_hotplug_pci.c index dcc75c78544..d8add34177f 100644 --- a/drivers/pci/hotplug/cpci_hotplug_pci.c +++ b/drivers/pci/hotplug/cpci_hotplug_pci.c @@ -252,8 +252,8 @@ int cpci_led_off(struct slot* slot)  int __ref cpci_configure_slot(struct slot *slot)  { +	struct pci_dev *dev;  	struct pci_bus *parent; -	int fn;  	dbg("%s - enter", __func__); @@ -282,18 +282,13 @@ int __ref cpci_configure_slot(struct slot *slot)  	}  	parent = slot->dev->bus; -	for (fn = 0; fn < 8; fn++) { -		struct pci_dev *dev; - -		dev = pci_get_slot(parent, -				   PCI_DEVFN(PCI_SLOT(slot->devfn), fn)); -		if (!dev) +	list_for_each_entry(dev, &parent->devices, bus_list) +		if (PCI_SLOT(dev->devfn) != PCI_SLOT(slot->devfn))  			continue;  		if ((dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) ||  		    (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS))  			pci_hp_add_bridge(dev); -		pci_dev_put(dev); -	} +  	pci_assign_unassigned_bridge_resources(parent->self); @@ -305,8 +300,7 @@ int __ref cpci_configure_slot(struct slot *slot)  int cpci_unconfigure_slot(struct slot* slot)  { -	int i; -	struct pci_dev *dev; +	struct pci_dev *dev, *temp;  	dbg("%s - enter", __func__);  	if (!slot->dev) { @@ -314,13 +308,12 @@ int cpci_unconfigure_slot(struct slot* slot)  		return -ENODEV;  	} -	for (i = 0; i < 8; i++) { -		dev = pci_get_slot(slot->bus, -				    PCI_DEVFN(PCI_SLOT(slot->devfn), i)); -		if (dev) { -			pci_stop_and_remove_bus_device(dev); -			pci_dev_put(dev); -		} +	list_for_each_entry_safe(dev, temp, &slot->bus->devices, bus_list) { +		if (PCI_SLOT(dev->devfn) != PCI_SLOT(slot->devfn)) +			continue; +		pci_dev_get(dev); +		pci_stop_and_remove_bus_device(dev); +		pci_dev_put(dev);  	}  	pci_dev_put(slot->dev);  	slot->dev = NULL;  |