summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-07-12 13:45:59 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-07-15 01:26:18 +0200
commit3a391a39593b48341f0908511590a6c0e55cc069 (patch)
tree010d442c1c624fa6d9e7d1ba46c2ff2b6331f722
parentad81f0545ef01ea651886dddac4bef6cec930092 (diff)
downloadlinux-3a391a39593b48341f0908511590a6c0e55cc069.tar.gz
linux-3a391a39593b48341f0908511590a6c0e55cc069.tar.bz2
linux-3a391a39593b48341f0908511590a6c0e55cc069.zip
ACPI / scan: Do not try to attach scan handlers to devices having them
In acpi_bus_device_attach(), if there is an ACPI device object for the given handle and that device object has a scan handler attached to it already, there's nothing more to do for that handle. Moreover, if acpi_scan_attach_handler() is called then, it may execute the .attach() callback of the ACPI scan handler already attached to the device object and that may lead to interesting breakage. For this reason, make acpi_bus_device_attach() return success immediately when the handle's device object has a scan handler attached to it. Reported-by: Toshi Kani <toshi.kani@hp.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Toshi Kani <toshi.kani@hp.com> Cc: 3.10+ <stable@vger.kernel.org>
-rw-r--r--drivers/acpi/scan.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 10985573aaa7..080d75962c57 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -1981,6 +1981,9 @@ static acpi_status acpi_bus_device_attach(acpi_handle handle, u32 lvl_not_used,
if (acpi_bus_get_device(handle, &device))
return AE_CTRL_DEPTH;
+ if (device->handler)
+ return AE_OK;
+
ret = acpi_scan_attach_handler(device);
if (ret)
return ret > 0 ? AE_OK : AE_CTRL_DEPTH;