[PATCH] acpi: check the online state of all children in container

From: Lee, Chun-Yi
Date: Tue Mar 21 2017 - 21:02:23 EST


Just checking the state of container is not enough to confirm that
the whole container is offlined. Kernel should checks all children's
offline state as the logic in acpi_container_offline().

Cc: "Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx>
Cc: Len Brown <lenb@xxxxxxxxxx>
Cc: Michal Hocko <mhocko@xxxxxxxx>
Cc: Jiri Kosina <jkosina@xxxxxxx>
Signed-off-by: "Lee, Chun-Yi" <jlee@xxxxxxxx>
---
drivers/acpi/scan.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 1926918..f08ca31 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -260,13 +260,15 @@ static int acpi_scan_try_to_offline(struct acpi_device *device)
static int acpi_scan_hot_remove(struct acpi_device *device)
{
acpi_handle handle = device->handle;
+ struct acpi_device *child;
unsigned long long sta;
acpi_status status;

if (device->handler && device->handler->hotplug.demand_offline
&& !acpi_force_hot_remove) {
- if (!acpi_scan_is_offline(device, true))
- return -EBUSY;
+ list_for_each_entry(child, &device->children, node)
+ if (!acpi_scan_is_offline(child, false))
+ return -EBUSY;
} else {
int error = acpi_scan_try_to_offline(device);
if (error)
--
2.10.2