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 | |
| 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>
| -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); |
