diff options
author | MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com> | 2006-03-22 00:49:33 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-06-19 17:13:22 -0400 |
commit | cde0e5d722c77d1194f40de54a99c90afe365480 (patch) | |
tree | 4c569d32f7ff40010e97a1a133bfbabed69e2b7d /drivers/pci/hotplug/acpiphp_glue.c | |
parent | c14424736e76f3d8477a41de531e6b5dcce3d5b0 (diff) |
[PATCH] acpiphp: turn off slot power at error case
When acpiphp_enable_slot() is failed, acpiphp does not change
the slot->flags. Therefore, when user tries to read power
status, acpiphp_get_power_status() returns the enable status
whether the slot is not really enabled.
This patch fixes this BUG.
Signed-off-by: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/pci/hotplug/acpiphp_glue.c')
-rw-r--r-- | drivers/pci/hotplug/acpiphp_glue.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c index bbe27c16bc3d..610a530232ff 100644 --- a/drivers/pci/hotplug/acpiphp_glue.c +++ b/drivers/pci/hotplug/acpiphp_glue.c | |||
@@ -1592,9 +1592,15 @@ int acpiphp_enable_slot(struct acpiphp_slot *slot) | |||
1592 | if (retval) | 1592 | if (retval) |
1593 | goto err_exit; | 1593 | goto err_exit; |
1594 | 1594 | ||
1595 | if (get_slot_status(slot) == ACPI_STA_ALL) | 1595 | if (get_slot_status(slot) == ACPI_STA_ALL) { |
1596 | /* configure all functions */ | 1596 | /* configure all functions */ |
1597 | retval = enable_device(slot); | 1597 | retval = enable_device(slot); |
1598 | if (retval) | ||
1599 | power_off_slot(slot); | ||
1600 | } else { | ||
1601 | dbg("%s: Slot status is not ACPI_STA_ALL\n", __FUNCTION__); | ||
1602 | power_off_slot(slot); | ||
1603 | } | ||
1598 | 1604 | ||
1599 | err_exit: | 1605 | err_exit: |
1600 | mutex_unlock(&slot->crit_sect); | 1606 | mutex_unlock(&slot->crit_sect); |