From ae5e963ef393dc717443f056243973696d31dfd2 Mon Sep 17 00:00:00 2001 From: Bjorn Helgaas Date: Mon, 21 Sep 2009 19:30:11 +0000 Subject: [PATCH] --- yaml --- r: 166388 b: refs/heads/master c: e3b87f8a9d5a61f6367c66d1bb0a4e19d251194d h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/acpi/scan.c | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index 9bf10c96bce6..d49394b9a03c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 778cbc1d3abd434b6d882714630235e3711bb15b +refs/heads/master: e3b87f8a9d5a61f6367c66d1bb0a4e19d251194d diff --git a/trunk/drivers/acpi/scan.c b/trunk/drivers/acpi/scan.c index 954bd01f295a..2c4cac576a7e 100644 --- a/trunk/drivers/acpi/scan.c +++ b/trunk/drivers/acpi/scan.c @@ -1400,10 +1400,10 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl, void *context, void **return_value) { struct acpi_bus_ops *ops = context; - struct acpi_device *device = NULL; - acpi_status status; int type; unsigned long long sta; + struct acpi_device *device; + acpi_status status; int result; result = acpi_bus_type_and_status(handle, &type, &sta); @@ -1414,13 +1414,16 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl, !(sta & ACPI_STA_DEVICE_FUNCTIONING)) return AE_CTRL_DEPTH; - if (ops->acpi_op_add) - status = acpi_add_single_object(&device, handle, type, sta, - ops); - else - status = acpi_bus_get_device(handle, &device); + /* + * We may already have an acpi_device from a previous enumeration. If + * so, we needn't add it again, but we may still have to start it. + */ + device = NULL; + acpi_bus_get_device(handle, &device); + if (ops->acpi_op_add && !device) + acpi_add_single_object(&device, handle, type, sta, ops); - if (ACPI_FAILURE(status)) + if (!device) return AE_CTRL_DEPTH; if (ops->acpi_op_start && !(ops->acpi_op_add)) {