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
..
acpi_pcihp.c
PCI: PCIe: Ask BIOS for control of all native services at once
2010-08-24 13:47:33 -07:00
acpiphp.h
headers: kobject.h redux
2011-01-10 08:51:44 -08:00
acpiphp_core.c
PCI: Make current and maximum bus speeds part of the PCI core
2010-02-22 16:15:17 -08:00
acpiphp_glue.c
PCI hotplug: acpiphp: set current_state to D0 in register_slot
2011-03-04 10:42:22 -08:00
acpiphp_ibm.c
sysfs: add struct file* to bin_attr callbacks
2010-05-21 09:37:31 -07:00
cpci_hotplug.h
PCI: cpci_hotplug: stop managing hotplug_slot->name
2008-10-22 16:42:39 -07:00
cpci_hotplug_core.c
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
cpci_hotplug_pci.c
PCI: cpci_hotplug: stop managing hotplug_slot->name
2008-10-22 16:42:39 -07:00
cpcihp_generic.c
PCI: hotplug/cpcihp, fix pci device refcounting
2010-02-22 16:17:02 -08:00
cpcihp_zt5550.c
PCI: ZT5550 CPCI Hotplug driver fix
2007-05-02 19:02:40 -07:00
cpcihp_zt5550.h
cpqphp.h
PCI: Make current and maximum bus speeds part of the PCI core
2010-02-22 16:15:17 -08:00
cpqphp_core.c
PCI: hotplug/cpqphp, fix NULL dereference
2010-06-11 13:10:21 -07:00
cpqphp_ctrl.c
PCI: Make current and maximum bus speeds part of the PCI core
2010-02-22 16:15:17 -08: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 Hotplug: cpqphp: don't use pci_find_slot()
2009-06-11 12:04:16 -07:00
cpqphp_sysfs.c
drivers: autoconvert trivial BKL users to private mutex
2010-10-05 15:01:04 +02:00
fakephp.c
PCI: use for_each_pci_dev()
2010-07-30 09:47:22 -07:00
ibmphp.h
PCI: ibmphp: stop managing hotplug_slot->name
2008-10-22 16:42:41 -07:00
ibmphp_core.c
PCI: Make current and maximum bus speeds part of the PCI core
2010-02-22 16:15:17 -08:00
ibmphp_ebda.c
PCI hotplug: ibmphp: Add check to prevent reading beyond mapped area
2010-11-11 09:34:31 -08:00
ibmphp_hpc.c
PCI hotplug: ibmphp-hpc: semaphore cleanup
2010-10-15 13:09:48 -07:00
ibmphp_pci.c
PCI: replace remaining __FUNCTION__ occurrences
2008-04-20 21:47:09 -07:00
ibmphp_res.c
ibmphp: Rename add_range() to add_bus_range() to avoid conflict
2010-02-10 17:45:09 -08:00
Kconfig
PCI: drivers/pci/slot.c should depend on CONFIG_SYSFS
2009-06-18 13:57:24 -07:00
Makefile
PCI hotplug: acpiphp should be linked after vendor drivers
2009-11-04 08:47:14 -08:00
pci_hotplug_core.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
pciehp.h
pciehp: update workqueue usage
2010-10-18 08:31:02 +02:00
pciehp_acpi.c
PCI hotplug: Fix unexpected driver unregister in pciehp_acpi.c
2010-12-23 12:51:49 -08:00
pciehp_core.c
pciehp: update workqueue usage
2010-10-18 08:31:02 +02:00
pciehp_ctrl.c
pciehp: update workqueue usage
2010-10-18 08:31:02 +02:00
pciehp_hpc.c
pciehp: update workqueue usage
2010-10-18 08:31:02 +02:00
pciehp_pci.c
PCI hotplug: pciehp: Fixed return value sign for pciehp_unconfigure_device
2010-07-30 09:29:15 -07:00
pcihp_skeleton.c
PCI hotplug: remove redundant .owner initializations
2009-06-16 14:30:12 -07:00
pcihp_slot.c
PCI hotplug: use pci_is_pcie()
2009-11-24 15:25:18 -08:00
rpadlpar.h
rpadlpar_core.c
powerpc/pseries: Flush lazy kernel mappings after unplug operations
2010-04-28 16:23:24 +10:00
rpadlpar_sysfs.c
PCI: introduce pci_slot
2008-06-10 14:37:03 -07:00
rpaphp.h
PCI hotplug: rpaphp: make debug var unique
2008-10-20 10:54:27 -07:00
rpaphp_core.c
powerpc/pseries: Flush lazy kernel mappings after unplug operations
2010-04-28 16:23:24 +10:00
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
sgi_hotplug.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
shpchp.h
shpchp: update workqueue usage
2010-10-18 08:33:02 +02:00
shpchp_core.c
shpchp: update workqueue usage
2010-10-18 08:33:02 +02:00
shpchp_ctrl.c
shpchp: update workqueue usage
2010-10-18 08:33:02 +02:00
shpchp_hpc.c
shpchp: update workqueue usage
2010-10-18 08:33:02 +02:00
shpchp_pci.c
PCI hotplug: shpchp: Removed check for hotplug of display devices
2010-07-30 09:29:16 -07:00
shpchp_sysfs.c
PCI: add pci_bus_for_each_resource(), remove direct bus->resource[] refs
2010-02-23 09:43:31 -08:00