linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] acpi: handle the acpi hotplug schedule error
@ 2017-06-07  6:05 Lee, Chun-Yi
  2017-06-07  8:36 ` Andy Shevchenko
  0 siblings, 1 reply; 7+ messages in thread
From: Lee, Chun-Yi @ 2017-06-07  6:05 UTC (permalink / raw)
  To: Rafael J . Wysocki; +Cc: linux-acpi, linux-kernel, Lee, Chun-Yi, Len Brown

Kernel should decrements the reference count of acpi device
when scheduling acpi hotplug work is failed, and also evaluates
_OST to notify BIOS the failure.

Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Len Brown <lenb@kernel.org>
Signed-off-by: "Lee, Chun-Yi" <jlee@suse.com>
---
 drivers/acpi/bus.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index 34fbe02..2f2cec9 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -427,8 +427,14 @@ static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
 	    (driver->flags & ACPI_DRIVER_ALL_NOTIFY_EVENTS))
 		driver->ops.notify(adev, type);
 
-	if (hotplug_event && ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
-		return;
+	if (hotplug_event) {
+		if (ACPI_FAILURE(acpi_hotplug_schedule(adev, type))) {
+			acpi_bus_put_acpi_device(adev);
+			goto err;
+		} else {
+			return;
+		}
+	}
 
 	acpi_bus_put_acpi_device(adev);
 	return;
-- 
2.10.2

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

* Re: [PATCH] acpi: handle the acpi hotplug schedule error
  2017-06-07  6:05 [PATCH] acpi: handle the acpi hotplug schedule error Lee, Chun-Yi
@ 2017-06-07  8:36 ` Andy Shevchenko
  2017-06-07 10:18   ` joeyli
  0 siblings, 1 reply; 7+ messages in thread
From: Andy Shevchenko @ 2017-06-07  8:36 UTC (permalink / raw)
  To: Lee, Chun-Yi
  Cc: Rafael J . Wysocki, linux-acpi, linux-kernel, Lee, Chun-Yi, Len Brown

On Wed, Jun 7, 2017 at 9:05 AM, Lee, Chun-Yi <joeyli.kernel@gmail.com> wrote:
> Kernel should decrements the reference count of acpi device
> when scheduling acpi hotplug work is failed, and also evaluates
> _OST to notify BIOS the failure.

> -       if (hotplug_event && ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
> -               return;
> +       if (hotplug_event) {
> +               if (ACPI_FAILURE(acpi_hotplug_schedule(adev, type))) {
> +                       acpi_bus_put_acpi_device(adev);
> +                       goto err;
> +               } else {
> +                       return;
> +               }
> +       }

Wouldn't be simpler to

-               return;
+               goto err_put_device;

+ err_put_device:
+       acpi_bus_put_acpi_device(adev);
 err:

-- 
With Best Regards,
Andy Shevchenko

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

* Re: [PATCH] acpi: handle the acpi hotplug schedule error
  2017-06-07  8:36 ` Andy Shevchenko
@ 2017-06-07 10:18   ` joeyli
  2017-06-07 10:46     ` Andy Shevchenko
  0 siblings, 1 reply; 7+ messages in thread
From: joeyli @ 2017-06-07 10:18 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Lee, Chun-Yi, Rafael J . Wysocki, linux-acpi, linux-kernel, Len Brown

Hi Andy, 

Thanks for your help to review my patch.

On Wed, Jun 07, 2017 at 11:36:55AM +0300, Andy Shevchenko wrote:
> On Wed, Jun 7, 2017 at 9:05 AM, Lee, Chun-Yi <joeyli.kernel@gmail.com> wrote:
> > Kernel should decrements the reference count of acpi device
> > when scheduling acpi hotplug work is failed, and also evaluates
> > _OST to notify BIOS the failure.
> 
> > -       if (hotplug_event && ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
> > -               return;

A note here...
When the acpi hotplug job is scheduled success, the adev device can not
be put because acpi_device_hotplug() will put it until hotplug routine
finished.

drivers/acpi/bus.c  acpi_bus_notify()
                    acpi_bus_get_acpi_device(handle) //get here
    drivers/acpi/osl.c  acpi_hotplug_schedule()
        drivers/acpi/osl.c  acpi_hotplug_work_fn()
            drivers/acpi/scan.c  acpi_device_hotplug()
                                 acpi_bus_put_acpi_device(adev) //put here

> > +       if (hotplug_event) {
> > +               if (ACPI_FAILURE(acpi_hotplug_schedule(adev, type))) {
> > +                       acpi_bus_put_acpi_device(adev);
> > +                       goto err;
> > +               } else {
> > +                       return;
> > +               }
> > +       }
> 
> Wouldn't be simpler to
> 
> -               return;
> +               goto err_put_device;
> 
> + err_put_device:
> +       acpi_bus_put_acpi_device(adev);
>  err:
>

So, do you mean like this?

	-       if (hotplug_event && ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
	-               return;
	+       if (hotplug_event) {
	+               if (ACPI_SUCCESS(acpi_hotplug_schedule(adev, type))) 
	+                       return;
	+               else
	+                       goto err_put_device;
	+       }

		acpi_bus_put_acpi_device(adev);
		return;

	+err_put_device:
	+       acpi_bus_put_acpi_device(adev);
	 err:
		acpi_evaluate_ost(handle, type, ost_code, NULL);
	}

Thanks for your suggestion, it looks simpler.

Joey Lee

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

* Re: [PATCH] acpi: handle the acpi hotplug schedule error
  2017-06-07 10:18   ` joeyli
@ 2017-06-07 10:46     ` Andy Shevchenko
  2017-06-07 15:39       ` joeyli
  0 siblings, 1 reply; 7+ messages in thread
From: Andy Shevchenko @ 2017-06-07 10:46 UTC (permalink / raw)
  To: joeyli
  Cc: Lee, Chun-Yi, Rafael J . Wysocki, linux-acpi, linux-kernel, Len Brown

On Wed, Jun 7, 2017 at 1:18 PM, joeyli <jlee@suse.com> wrote:
> On Wed, Jun 07, 2017 at 11:36:55AM +0300, Andy Shevchenko wrote:
>> On Wed, Jun 7, 2017 at 9:05 AM, Lee, Chun-Yi <joeyli.kernel@gmail.com> wrote:
>> > Kernel should decrements the reference count of acpi device
>> > when scheduling acpi hotplug work is failed, and also evaluates
>> > _OST to notify BIOS the failure.

> So, do you mean like this?

Yes, see below.

>
>         -       if (hotplug_event && ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
>         -               return;
>         +       if (hotplug_event) {

>         +               if (ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
>         +                       return;

>         +               else

It's redundant...

>         +                       goto err_put_device;

...perhaps

         if (ACPI_FAILURE(acpi_hotplug_schedule(adev, type)))
                 goto err_put_device;
         return;


>         +       }

>
>                 acpi_bus_put_acpi_device(adev);
>                 return;
>
>         +err_put_device:
>         +       acpi_bus_put_acpi_device(adev);
>          err:
>                 acpi_evaluate_ost(handle, type, ost_code, NULL);
>         }


-- 
With Best Regards,
Andy Shevchenko

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

* Re: [PATCH] acpi: handle the acpi hotplug schedule error
  2017-06-07 10:46     ` Andy Shevchenko
@ 2017-06-07 15:39       ` joeyli
  2017-06-07 16:55         ` Andy Shevchenko
  0 siblings, 1 reply; 7+ messages in thread
From: joeyli @ 2017-06-07 15:39 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Lee, Chun-Yi, Rafael J . Wysocki, linux-acpi, linux-kernel, Len Brown

On Wed, Jun 07, 2017 at 01:46:37PM +0300, Andy Shevchenko wrote:
> On Wed, Jun 7, 2017 at 1:18 PM, joeyli <jlee@suse.com> wrote:
> > On Wed, Jun 07, 2017 at 11:36:55AM +0300, Andy Shevchenko wrote:
> >> On Wed, Jun 7, 2017 at 9:05 AM, Lee, Chun-Yi <joeyli.kernel@gmail.com> wrote:
> >> > Kernel should decrements the reference count of acpi device
> >> > when scheduling acpi hotplug work is failed, and also evaluates
> >> > _OST to notify BIOS the failure.
> 
> > So, do you mean like this?
> 
> Yes, see below.
> 
> >
> >         -       if (hotplug_event && ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
> >         -               return;
> >         +       if (hotplug_event) {
> 
> >         +               if (ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
> >         +                       return;
> 
> >         +               else
> 
> It's redundant...
>

Oh~ Yes, you are right. The 'else' can be removed
 
> >         +                       goto err_put_device;
> 
> ...perhaps
> 
>          if (ACPI_FAILURE(acpi_hotplug_schedule(adev, type)))
>                  goto err_put_device;
>          return;
> 

I think normally it should be success. So how about:

	if (hotplug_event) {
		if (ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
			return;
		goto err_put_device;
	}
 
> >
> >                 acpi_bus_put_acpi_device(adev);
> >                 return;
> >
> >         +err_put_device:
> >         +       acpi_bus_put_acpi_device(adev);
> >          err:
> >                 acpi_evaluate_ost(handle, type, ost_code, NULL);
> >         }

Thanks a lot!
Joey Lee

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

* Re: [PATCH] acpi: handle the acpi hotplug schedule error
  2017-06-07 15:39       ` joeyli
@ 2017-06-07 16:55         ` Andy Shevchenko
  0 siblings, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2017-06-07 16:55 UTC (permalink / raw)
  To: joeyli
  Cc: Lee, Chun-Yi, Rafael J . Wysocki, linux-acpi, linux-kernel, Len Brown

On Wed, Jun 7, 2017 at 6:39 PM, joeyli <jlee@suse.com> wrote:
> On Wed, Jun 07, 2017 at 01:46:37PM +0300, Andy Shevchenko wrote:
>> On Wed, Jun 7, 2017 at 1:18 PM, joeyli <jlee@suse.com> wrote:
>> > On Wed, Jun 07, 2017 at 11:36:55AM +0300, Andy Shevchenko wrote:
>> >> On Wed, Jun 7, 2017 at 9:05 AM, Lee, Chun-Yi <joeyli.kernel@gmail.com> wrote:

> I think normally it should be success. So how about:
>
>         if (hotplug_event) {
>                 if (ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
>                         return;
>                 goto err_put_device;
>         }

Fine by me.

-- 
With Best Regards,
Andy Shevchenko

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

* [PATCH] acpi: handle the acpi hotplug schedule error
@ 2017-06-03  7:38 Lee, Chun-Yi
  0 siblings, 0 replies; 7+ messages in thread
From: Lee, Chun-Yi @ 2017-06-03  7:38 UTC (permalink / raw)
  To: Rafael J . Wysocki; +Cc: linux-acpi, linux-kernel, Lee, Chun-Yi, Len Brown

Kernel should the decrement reference count of acpi device when
acpi hotplug work scheduling is failed. And, kernel should evaluates
_OST to notify BIOS the failure.

Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Len Brown <lenb@kernel.org>
Signed-off-by: "Lee, Chun-Yi" <jlee@suse.com>
---
 drivers/acpi/bus.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index 34fbe02..2f2cec9 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -427,8 +427,14 @@ static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
 	    (driver->flags & ACPI_DRIVER_ALL_NOTIFY_EVENTS))
 		driver->ops.notify(adev, type);
 
-	if (hotplug_event && ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
-		return;
+	if (hotplug_event) {
+		if (ACPI_FAILURE(acpi_hotplug_schedule(adev, type))) {
+			acpi_bus_put_acpi_device(adev);
+			goto err;
+		} else {
+			return;
+		}
+	}
 
 	acpi_bus_put_acpi_device(adev);
 	return;
-- 
2.10.2

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

end of thread, other threads:[~2017-06-07 16:55 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-07  6:05 [PATCH] acpi: handle the acpi hotplug schedule error Lee, Chun-Yi
2017-06-07  8:36 ` Andy Shevchenko
2017-06-07 10:18   ` joeyli
2017-06-07 10:46     ` Andy Shevchenko
2017-06-07 15:39       ` joeyli
2017-06-07 16:55         ` Andy Shevchenko
  -- strict thread matches above, loose matches on Subject: below --
2017-06-03  7:38 Lee, Chun-Yi

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).