linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH] acpi: check the online state of all children in container
  2017-03-22  1:01 [PATCH] acpi: check the online state of all children in container Lee, Chun-Yi
@ 2017-03-22  0:58 ` Rafael J. Wysocki
  2017-03-22  3:01   ` joeyli
  0 siblings, 1 reply; 3+ messages in thread
From: Rafael J. Wysocki @ 2017-03-22  0:58 UTC (permalink / raw)
  To: Lee, Chun-Yi
  Cc: Len Brown, linux-acpi, linux-kernel, Lee, Chun-Yi, Michal Hocko,
	Jiri Kosina

On Wednesday, March 22, 2017 09:01:48 AM Lee, Chun-Yi wrote:
> Just checking the state of container is not enough to confirm that
> the whole container is offlined.

And why is that so?

> Kernel should checks all children's
> offline state as the logic in acpi_container_offline().
> 
> Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
> Cc: Len Brown <lenb@kernel.org>
> Cc: Michal Hocko <mhocko@suse.com>
> Cc: Jiri Kosina <jkosina@suse.cz>
> Signed-off-by: "Lee, Chun-Yi" <jlee@suse.com>
> ---
>  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)
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH] acpi: check the online state of all children in container
@ 2017-03-22  1:01 Lee, Chun-Yi
  2017-03-22  0:58 ` Rafael J. Wysocki
  0 siblings, 1 reply; 3+ messages in thread
From: Lee, Chun-Yi @ 2017-03-22  1:01 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: Len Brown, linux-acpi, linux-kernel, Lee, Chun-Yi, Michal Hocko,
	Jiri Kosina

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@rjwysocki.net>
Cc: Len Brown <lenb@kernel.org>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: "Lee, Chun-Yi" <jlee@suse.com>
---
 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

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] acpi: check the online state of all children in container
  2017-03-22  0:58 ` Rafael J. Wysocki
@ 2017-03-22  3:01   ` joeyli
  0 siblings, 0 replies; 3+ messages in thread
From: joeyli @ 2017-03-22  3:01 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Lee, Chun-Yi, Len Brown, linux-acpi, linux-kernel, Michal Hocko,
	Jiri Kosina

On Wed, Mar 22, 2017 at 01:58:30AM +0100, Rafael J. Wysocki wrote:
> On Wednesday, March 22, 2017 09:01:48 AM Lee, Chun-Yi wrote:
> > Just checking the state of container is not enough to confirm that
> > the whole container is offlined.
> 
> And why is that so?
>

Actually there does not have real kernel issue triggered by this code now.
I reviewed code and found the difference between acpi_container_offline().

Considering a container that it includes devices and sub-containers
like this:

Scope (_SB)
    Device (MODU)
	Name (_HID, "ACPI0004")		<===  main-container
        Device (PCIE)
		Name (_HID, EisaId ("PNP0A08"))
        Device (SUBM)
            	Name (_HID, "ACPI0004")		<=== sub-container
		Device (MEM0)
			Name (_HID, EisaId ("PNP0C80"))
	...

The original code checks the physical nodes on the main container but
doesn't check children's physical nodes. So, it may happen the sub-container
didn't offline but the offline checking of main container is pass. 

Please kindly direct me if I misunderstood or missed any detail in the codes
about physcial node and container offline.

Thank a lot!
Joey Lee

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-03-22  3:22 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-22  1:01 [PATCH] acpi: check the online state of all children in container Lee, Chun-Yi
2017-03-22  0:58 ` Rafael J. Wysocki
2017-03-22  3:01   ` joeyli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).