diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c index 5b5fa77cec0e..787ba8aac9b5 100644 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c @@ -1681,15 +1681,18 @@ void acpi_device_add_finalize(struct acpi_device *device) } static int acpi_add_single_object(struct acpi_device **child, - acpi_handle handle, int type, - unsigned long long sta) + acpi_handle handle, int type) { struct acpi_device_info *info = NULL; + unsigned long long sta = ACPI_STA_DEFAULT; struct acpi_device *device; int result; - if (handle != ACPI_ROOT_OBJECT && type == ACPI_BUS_TYPE_DEVICE) + if (type == ACPI_BUS_TYPE_DEVICE && handle != ACPI_ROOT_OBJECT) acpi_get_object_info(handle, &info); + else if (type == ACPI_BUS_TYPE_PROCESSOR && + ACPI_FAILURE(acpi_bus_get_status_handle(handle, &sta))) + return -ENODEV; device = kzalloc(sizeof(struct acpi_device), GFP_KERNEL); if (!device) { @@ -1910,7 +1913,6 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, bool check_dep, struct acpi_device **adev_p) { struct acpi_device *device = NULL; - unsigned long long sta = ACPI_STA_DEFAULT; acpi_object_type acpi_type; int type; @@ -1938,9 +1940,6 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, bool check_dep, break; case ACPI_TYPE_PROCESSOR: - if (ACPI_FAILURE(acpi_bus_get_status_handle(handle, &sta))) - return AE_OK; - type = ACPI_BUS_TYPE_PROCESSOR; break; @@ -1955,7 +1954,7 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, bool check_dep, return AE_OK; } - acpi_add_single_object(&device, handle, type, sta); + acpi_add_single_object(&device, handle, type); if (!device) return AE_CTRL_DEPTH; @@ -2229,8 +2228,7 @@ int acpi_bus_register_early_device(int type) struct acpi_device *device = NULL; int result; - result = acpi_add_single_object(&device, NULL, - type, ACPI_STA_DEFAULT); + result = acpi_add_single_object(&device, NULL, type); if (result) return result; @@ -2250,8 +2248,7 @@ static int acpi_bus_scan_fixed(void) struct acpi_device *device = NULL; result = acpi_add_single_object(&device, NULL, - ACPI_BUS_TYPE_POWER_BUTTON, - ACPI_STA_DEFAULT); + ACPI_BUS_TYPE_POWER_BUTTON); if (result) return result; @@ -2267,8 +2264,7 @@ static int acpi_bus_scan_fixed(void) struct acpi_device *device = NULL; result = acpi_add_single_object(&device, NULL, - ACPI_BUS_TYPE_SLEEP_BUTTON, - ACPI_STA_DEFAULT); + ACPI_BUS_TYPE_SLEEP_BUTTON); if (result) return result;