linux/drivers/pci
Stefano Stabellini 47e9037ac1 PCI hotplug: acpiphp: set current_state to D0 in register_slot
If a device doesn't support power management (pm_cap == 0) but it is
acpi_pci_power_manageable() because there is a _PS0 method declared for
it and _EJ0 is also declared for the slot then nobody is going to set
current_state = PCI_D0 for this device.  This is what I think it is
happening:

pci_enable_device
    |
__pci_enable_device_flags
/* here we do not set current_state because !pm_cap */
    |
do_pci_enable_device
    |
pci_set_power_state
    |
__pci_start_power_transition
    |
pci_platform_power_transition
/* platform_pci_power_manageable() calls acpi_pci_power_manageable that
 * returns true */
    |
platform_pci_set_power_state
/* acpi_pci_set_power_state gets called and does nothing because the
 * acpi device has _EJ0, see the comment "If the ACPI device has _EJ0,
 * ignore the device" */

at this point if we refer to the commit message that introduced the
comment above (10b3dcae0f), it is up to
the hotplug driver to set the state to D0.
However AFAICT the pci hotplug driver never does, in fact
drivers/pci/hotplug/acpiphp_glue.c:register_slot sets the slot flags to
(SLOT_ENABLED | SLOT_POWEREDON) but it does not set the pci device
current state to PCI_D0.

So my proposed fix is also to set current_state = PCI_D0 in
register_slot.
Comments are very welcome.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
2011-03-04 10:42:22 -08:00
..
hotplug PCI hotplug: acpiphp: set current_state to D0 in register_slot 2011-03-04 10:42:22 -08:00
pcie PCI: aer-inject: Override PCIe AER Mask Registers 2011-03-04 10:41:02 -08:00
.gitignore Add some basic .gitignore files 2005-10-18 08:26:15 -07:00
access.c
bus.c Revert "PCI: allocate bus resources from the top down" 2010-12-17 10:00:54 -08:00
dmar.c x86, vt-d: Handle previous faults after enabling fault handling 2010-12-13 16:53:57 -08:00
hotplug-pci.c
hotplug.c Driver core: change add_uevent_var to use a struct 2007-10-12 14:51:01 -07:00
htirq.c ht: Convert to new irq_chip functions 2010-10-12 16:53:37 +02:00
intel-iommu.c
intr_remapping.c x86: Speed up the irq_remapped check in hot pathes 2010-10-12 16:53:42 +02:00
intr_remapping.h
ioapic.c
iov.c
iova.c
irq.c
Kconfig PCI: Export ACPI _DSM provided firmware instance number and string name to sysfs 2011-03-04 10:41:56 -08:00
Makefile PCI: Export ACPI _DSM provided firmware instance number and string name to sysfs 2011-03-04 10:41:56 -08:00
msi.c PCI: Add mask bit definition for MSI-X table 2010-12-23 12:53:08 -08:00
msi.h PCI: MSI: Move MSI-X entry definition to pci_regs.h 2010-12-23 12:53:07 -08:00
pci-acpi.c PCI/PM: Report wakeup events before resuming devices 2011-01-14 08:55:43 -08:00
pci-driver.c PCI: fix __pci_device_probe kernel-doc warning 2010-12-23 12:53:09 -08:00
pci-label.c PCI: Export ACPI _DSM provided firmware instance number and string name to sysfs 2011-03-04 10:41:56 -08:00
pci-stub.c PCI: pci-stub: ignore zero-length id parameters 2010-12-23 12:53:52 -08:00
pci-sysfs.c PCI: sysfs: Fix failure path for addition of "vpd" attribute 2011-02-08 10:02:46 -08:00
pci.c PCI/PM: Report wakeup events before resuming devices 2011-01-14 08:55:43 -08:00
pci.h PCI: Export ACPI _DSM provided firmware instance number and string name to sysfs 2011-03-04 10:41:56 -08:00
probe.c PCI: Avoid potential NULL pointer dereference in pci_scan_bridge 2011-02-08 13:08:05 -08:00
proc.c BKL: remove extraneous #include <smp_lock.h> 2010-11-17 08:59:32 -08:00
quirks.c PCI: add more checking to ICH region quirks 2011-03-04 10:41:32 -08:00
remove.c
rom.c
search.c
setup-bus.c PCI hotplug: make sure child bridges are enabled at hotplug time 2010-07-30 09:29:16 -07:00
setup-irq.c
setup-res.c PCI: fix message typo 2010-10-17 20:03:05 -07:00
slot.c
syscall.c
vpd.c
xen-pcifront.c xen-pcifront: fix PCI reference leak 2010-11-08 11:41:15 -05:00