Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752783AbdCVBB5 (ORCPT ); Tue, 21 Mar 2017 21:01:57 -0400 Received: from mail-pg0-f65.google.com ([74.125.83.65]:36414 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750885AbdCVBBy (ORCPT ); Tue, 21 Mar 2017 21:01:54 -0400 From: "Lee, Chun-Yi" X-Google-Original-From: "Lee, Chun-Yi" To: "Rafael J . Wysocki" Cc: Len Brown , linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, "Lee, Chun-Yi" , Michal Hocko , Jiri Kosina Subject: [PATCH] acpi: check the online state of all children in container Date: Wed, 22 Mar 2017 09:01:48 +0800 Message-Id: <20170322010148.32675-1-jlee@suse.com> X-Mailer: git-send-email 2.10.2 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1243 Lines: 37 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" Cc: Len Brown Cc: Michal Hocko Cc: Jiri Kosina Signed-off-by: "Lee, Chun-Yi" --- 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