All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] ACPI / scan: Additional changes
@ 2013-01-26 22:39 Rafael J. Wysocki
  2013-01-26 22:41 ` [PATCH 1/2] ACPI / scan: Make namespace scanning and trimming mutually exclusive Rafael J. Wysocki
  2013-01-26 22:43 ` [PATCH 2/2] ACPI / scan: Make scanning of fixed devices follow the general scheme Rafael J. Wysocki
  0 siblings, 2 replies; 12+ messages in thread
From: Rafael J. Wysocki @ 2013-01-26 22:39 UTC (permalink / raw)
  To: ACPI Devel Maling List
  Cc: LKML, Bjorn Helgaas, Yinghai Lu, Jiang Liu, Toshi Kani

Hi All,

The following patches make two more changes to the ACPI namespace scanning
code that I think are more-or-less useful:

[1/2] Introduce lock to prevent acpi_bus_scan() from running in parallel with
      acpi_bus_trim() to avoid removing device nodes while we're setting
      them up.
[2/2] Change the scanning of fixed device nodes to work along the lines of
      acpi_bus_scan().

Patch [1/2] should apply on top of the acpi-scan branch, but [2/2] needs the
entire linux-pm.git/linux-next branch.

Thanks,
Rafael


-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

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

* [PATCH 1/2] ACPI / scan: Make namespace scanning and trimming mutually exclusive
  2013-01-26 22:39 [PATCH 0/2] ACPI / scan: Additional changes Rafael J. Wysocki
@ 2013-01-26 22:41 ` Rafael J. Wysocki
  2013-01-26 23:19   ` Yinghai Lu
  2013-01-26 22:43 ` [PATCH 2/2] ACPI / scan: Make scanning of fixed devices follow the general scheme Rafael J. Wysocki
  1 sibling, 1 reply; 12+ messages in thread
From: Rafael J. Wysocki @ 2013-01-26 22:41 UTC (permalink / raw)
  To: ACPI Devel Maling List
  Cc: LKML, Bjorn Helgaas, Yinghai Lu, Jiang Liu, Toshi Kani

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

There is no guarantee that acpi_bus_scan() and acpi_bus_trim() will
not be run in parallel for the same scope of the ACPI namespace,
which may lead to a great deal of confusion, so introduce a new mutex
to prevent that from happening.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/acpi/scan.c |   16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

Index: linux-pm/drivers/acpi/scan.c
===================================================================
--- linux-pm.orig/drivers/acpi/scan.c
+++ linux-pm/drivers/acpi/scan.c
@@ -52,6 +52,7 @@ static const struct acpi_device_id acpi_
 
 static LIST_HEAD(acpi_device_list);
 static LIST_HEAD(acpi_bus_id_list);
+static DEFINE_MUTEX(acpi_scan_lock);
 DEFINE_MUTEX(acpi_device_lock);
 LIST_HEAD(acpi_wakeup_device_list);
 
@@ -1612,19 +1613,22 @@ static acpi_status acpi_bus_device_attac
 int acpi_bus_scan(acpi_handle handle)
 {
 	void *device = NULL;
+	int error = 0;
+
+	mutex_lock(&acpi_scan_lock);
 
 	if (ACPI_SUCCESS(acpi_bus_check_add(handle, 0, NULL, &device)))
 		acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
 				    acpi_bus_check_add, NULL, NULL, &device);
 
 	if (!device)
-		return -ENODEV;
-
-	if (ACPI_SUCCESS(acpi_bus_device_attach(handle, 0, NULL, NULL)))
+		error = -ENODEV;
+	else if (ACPI_SUCCESS(acpi_bus_device_attach(handle, 0, NULL, NULL)))
 		acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
 				    acpi_bus_device_attach, NULL, NULL, NULL);
 
-	return 0;
+	mutex_unlock(&acpi_scan_lock);
+	return error;
 }
 EXPORT_SYMBOL(acpi_bus_scan);
 
@@ -1653,6 +1657,8 @@ static acpi_status acpi_bus_remove(acpi_
 
 void acpi_bus_trim(struct acpi_device *start)
 {
+	mutex_lock(&acpi_scan_lock);
+
 	/*
 	 * Execute acpi_bus_device_detach() as a post-order callback to detach
 	 * all ACPI drivers from the device nodes being removed.
@@ -1667,6 +1673,8 @@ void acpi_bus_trim(struct acpi_device *s
 	acpi_walk_namespace(ACPI_TYPE_ANY, start->handle, ACPI_UINT32_MAX, NULL,
 			    acpi_bus_remove, NULL, NULL);
 	acpi_bus_remove(start->handle, 0, NULL, NULL);
+
+	mutex_unlock(&acpi_scan_lock);
 }
 EXPORT_SYMBOL_GPL(acpi_bus_trim);
 


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

* [PATCH 2/2] ACPI / scan: Make scanning of fixed devices follow the general scheme
  2013-01-26 22:39 [PATCH 0/2] ACPI / scan: Additional changes Rafael J. Wysocki
  2013-01-26 22:41 ` [PATCH 1/2] ACPI / scan: Make namespace scanning and trimming mutually exclusive Rafael J. Wysocki
@ 2013-01-26 22:43 ` Rafael J. Wysocki
  2013-01-26 23:26   ` Yinghai Lu
  1 sibling, 1 reply; 12+ messages in thread
From: Rafael J. Wysocki @ 2013-01-26 22:43 UTC (permalink / raw)
  To: ACPI Devel Maling List
  Cc: LKML, Bjorn Helgaas, Yinghai Lu, Jiang Liu, Toshi Kani

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Make acpi_bus_scan_fixed() use device_attach() directly to attach
drivers, if any, to the fixed devices in analogy with how
acpi_bus_scan() works, which allows the last argument of
acpi_add_single_object() to be dropped and the manipulation of the
flags.match_driver bit to be moved to acpi_init_device_object()
and acpi_device_add_finalize().

After these changes all of the functions for the initialization
and registration of struct acpi_device objects work in the same
way for all of them.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/acpi/scan.c |   35 ++++++++++++++++++++++++-----------
 1 file changed, 24 insertions(+), 11 deletions(-)

Index: linux-pm/drivers/acpi/scan.c
===================================================================
--- linux-pm.orig/drivers/acpi/scan.c
+++ linux-pm/drivers/acpi/scan.c
@@ -1437,19 +1437,21 @@ void acpi_init_device_object(struct acpi
 	acpi_device_get_busid(device);
 	acpi_device_set_id(device);
 	acpi_bus_get_flags(device);
+	device->flags.match_driver = false;
 	device_initialize(&device->dev);
 	dev_set_uevent_suppress(&device->dev, true);
 }
 
 void acpi_device_add_finalize(struct acpi_device *device)
 {
+	device->flags.match_driver = true;
 	dev_set_uevent_suppress(&device->dev, false);
 	kobject_uevent(&device->dev.kobj, KOBJ_ADD);
 }
 
 static int acpi_add_single_object(struct acpi_device **child,
 				  acpi_handle handle, int type,
-				  unsigned long long sta, bool match_driver)
+				  unsigned long long sta)
 {
 	int result;
 	struct acpi_device *device;
@@ -1465,7 +1467,6 @@ static int acpi_add_single_object(struct
 	acpi_bus_get_power_flags(device);
 	acpi_bus_get_wakeup_device_flags(device);
 
-	device->flags.match_driver = match_driver;
 	result = acpi_device_add(device, acpi_device_release);
 	if (result) {
 		acpi_device_release(&device->dev);
@@ -1558,12 +1559,10 @@ static acpi_status acpi_bus_check_add(ac
 		return AE_CTRL_DEPTH;
 	}
 
-	acpi_add_single_object(&device, handle, type, sta, false);
+	acpi_add_single_object(&device, handle, type, sta);
 	if (!device)
 		return AE_CTRL_DEPTH;
 
-	device->flags.match_driver = true;
-
  out:
 	if (!*return_value)
 		*return_value = device;
@@ -1681,25 +1680,39 @@ EXPORT_SYMBOL_GPL(acpi_bus_trim);
 static int acpi_bus_scan_fixed(void)
 {
 	int result = 0;
-	struct acpi_device *device = NULL;
 
 	/*
 	 * Enumerate all fixed-feature devices.
 	 */
-	if ((acpi_gbl_FADT.flags & ACPI_FADT_POWER_BUTTON) == 0) {
+	if (!(acpi_gbl_FADT.flags & ACPI_FADT_POWER_BUTTON)) {
+		struct acpi_device *device = NULL;
+
 		result = acpi_add_single_object(&device, NULL,
 						ACPI_BUS_TYPE_POWER_BUTTON,
-						ACPI_STA_DEFAULT, true);
+						ACPI_STA_DEFAULT);
+		if (result)
+			return result;
+
+		result = device_attach(&device->dev);
+		if (result < 0)
+			return result;
+
 		device_init_wakeup(&device->dev, true);
 	}
 
-	if ((acpi_gbl_FADT.flags & ACPI_FADT_SLEEP_BUTTON) == 0) {
+	if (!(acpi_gbl_FADT.flags & ACPI_FADT_SLEEP_BUTTON)) {
+		struct acpi_device *device = NULL;
+
 		result = acpi_add_single_object(&device, NULL,
 						ACPI_BUS_TYPE_SLEEP_BUTTON,
-						ACPI_STA_DEFAULT, true);
+						ACPI_STA_DEFAULT);
+		if (result)
+			return result;
+
+		result = device_attach(&device->dev);
 	}
 
-	return result;
+	return result < 0 ? result : 0;
 }
 
 int __init acpi_scan_init(void)


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

* Re: [PATCH 1/2] ACPI / scan: Make namespace scanning and trimming mutually exclusive
  2013-01-26 22:41 ` [PATCH 1/2] ACPI / scan: Make namespace scanning and trimming mutually exclusive Rafael J. Wysocki
@ 2013-01-26 23:19   ` Yinghai Lu
  2013-01-29 13:59     ` Steven Newbury
  2013-02-02 11:58     ` Steven Newbury
  0 siblings, 2 replies; 12+ messages in thread
From: Yinghai Lu @ 2013-01-26 23:19 UTC (permalink / raw)
  To: Rafael J. Wysocki, Steven Newbury
  Cc: ACPI Devel Maling List, LKML, Bjorn Helgaas, Jiang Liu, Toshi Kani

On Sat, Jan 26, 2013 at 2:41 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>
> There is no guarantee that acpi_bus_scan() and acpi_bus_trim() will
> not be run in parallel for the same scope of the ACPI namespace,
> which may lead to a great deal of confusion, so introduce a new mutex
> to prevent that from happening.
>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Acked-by: Yinghai Lu <yinghai@kernel.org>

Steven,

Can you apply this one to for-pci-res-alloc to check if racing with
docking hotplug/eject
still happen?
or wait one or two days after i rebase that branch.

Thanks

Yinghai

> ---
>  drivers/acpi/scan.c |   16 ++++++++++++----
>  1 file changed, 12 insertions(+), 4 deletions(-)
>
> Index: linux-pm/drivers/acpi/scan.c
> ===================================================================
> --- linux-pm.orig/drivers/acpi/scan.c
> +++ linux-pm/drivers/acpi/scan.c
> @@ -52,6 +52,7 @@ static const struct acpi_device_id acpi_
>
>  static LIST_HEAD(acpi_device_list);
>  static LIST_HEAD(acpi_bus_id_list);
> +static DEFINE_MUTEX(acpi_scan_lock);
>  DEFINE_MUTEX(acpi_device_lock);
>  LIST_HEAD(acpi_wakeup_device_list);
>
> @@ -1612,19 +1613,22 @@ static acpi_status acpi_bus_device_attac
>  int acpi_bus_scan(acpi_handle handle)
>  {
>         void *device = NULL;
> +       int error = 0;
> +
> +       mutex_lock(&acpi_scan_lock);
>
>         if (ACPI_SUCCESS(acpi_bus_check_add(handle, 0, NULL, &device)))
>                 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
>                                     acpi_bus_check_add, NULL, NULL, &device);
>
>         if (!device)
> -               return -ENODEV;
> -
> -       if (ACPI_SUCCESS(acpi_bus_device_attach(handle, 0, NULL, NULL)))
> +               error = -ENODEV;
> +       else if (ACPI_SUCCESS(acpi_bus_device_attach(handle, 0, NULL, NULL)))
>                 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
>                                     acpi_bus_device_attach, NULL, NULL, NULL);
>
> -       return 0;
> +       mutex_unlock(&acpi_scan_lock);
> +       return error;
>  }
>  EXPORT_SYMBOL(acpi_bus_scan);
>
> @@ -1653,6 +1657,8 @@ static acpi_status acpi_bus_remove(acpi_
>
>  void acpi_bus_trim(struct acpi_device *start)
>  {
> +       mutex_lock(&acpi_scan_lock);
> +
>         /*
>          * Execute acpi_bus_device_detach() as a post-order callback to detach
>          * all ACPI drivers from the device nodes being removed.
> @@ -1667,6 +1673,8 @@ void acpi_bus_trim(struct acpi_device *s
>         acpi_walk_namespace(ACPI_TYPE_ANY, start->handle, ACPI_UINT32_MAX, NULL,
>                             acpi_bus_remove, NULL, NULL);
>         acpi_bus_remove(start->handle, 0, NULL, NULL);
> +
> +       mutex_unlock(&acpi_scan_lock);
>  }
>  EXPORT_SYMBOL_GPL(acpi_bus_trim);
>
>

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

* Re: [PATCH 2/2] ACPI / scan: Make scanning of fixed devices follow the general scheme
  2013-01-26 22:43 ` [PATCH 2/2] ACPI / scan: Make scanning of fixed devices follow the general scheme Rafael J. Wysocki
@ 2013-01-26 23:26   ` Yinghai Lu
  0 siblings, 0 replies; 12+ messages in thread
From: Yinghai Lu @ 2013-01-26 23:26 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: ACPI Devel Maling List, LKML, Bjorn Helgaas, Jiang Liu, Toshi Kani

On Sat, Jan 26, 2013 at 2:43 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>
> Make acpi_bus_scan_fixed() use device_attach() directly to attach
> drivers, if any, to the fixed devices in analogy with how
> acpi_bus_scan() works, which allows the last argument of
> acpi_add_single_object() to be dropped and the manipulation of the
> flags.match_driver bit to be moved to acpi_init_device_object()
> and acpi_device_add_finalize().
>
> After these changes all of the functions for the initialization
> and registration of struct acpi_device objects work in the same
> way for all of them.
>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
>  drivers/acpi/scan.c |   35 ++++++++++++++++++++++++-----------
>  1 file changed, 24 insertions(+), 11 deletions(-)
>
> Index: linux-pm/drivers/acpi/scan.c
> ===================================================================
> --- linux-pm.orig/drivers/acpi/scan.c
> +++ linux-pm/drivers/acpi/scan.c
> @@ -1437,19 +1437,21 @@ void acpi_init_device_object(struct acpi
>         acpi_device_get_busid(device);
>         acpi_device_set_id(device);
>         acpi_bus_get_flags(device);
> +       device->flags.match_driver = false;
>         device_initialize(&device->dev);
>         dev_set_uevent_suppress(&device->dev, true);
>  }
>
>  void acpi_device_add_finalize(struct acpi_device *device)
>  {
> +       device->flags.match_driver = true;
>         dev_set_uevent_suppress(&device->dev, false);
>         kobject_uevent(&device->dev.kobj, KOBJ_ADD);
>  }
>
>  static int acpi_add_single_object(struct acpi_device **child,
>                                   acpi_handle handle, int type,
> -                                 unsigned long long sta, bool match_driver)
> +                                 unsigned long long sta)
>  {
>         int result;
>         struct acpi_device *device;
> @@ -1465,7 +1467,6 @@ static int acpi_add_single_object(struct
>         acpi_bus_get_power_flags(device);
>         acpi_bus_get_wakeup_device_flags(device);
>
> -       device->flags.match_driver = match_driver;
>         result = acpi_device_add(device, acpi_device_release);
>         if (result) {
>                 acpi_device_release(&device->dev);
> @@ -1558,12 +1559,10 @@ static acpi_status acpi_bus_check_add(ac
>                 return AE_CTRL_DEPTH;
>         }
>
> -       acpi_add_single_object(&device, handle, type, sta, false);
> +       acpi_add_single_object(&device, handle, type, sta);
>         if (!device)
>                 return AE_CTRL_DEPTH;
>
> -       device->flags.match_driver = true;
> -
>   out:
>         if (!*return_value)
>                 *return_value = device;

nice cleanup.

Acked-by: Yinghai Lu <yinghai@kernel.org>

> @@ -1681,25 +1680,39 @@ EXPORT_SYMBOL_GPL(acpi_bus_trim);
>  static int acpi_bus_scan_fixed(void)
>  {
>         int result = 0;
> -       struct acpi_device *device = NULL;
>
>         /*
>          * Enumerate all fixed-feature devices.
>          */
> -       if ((acpi_gbl_FADT.flags & ACPI_FADT_POWER_BUTTON) == 0) {
> +       if (!(acpi_gbl_FADT.flags & ACPI_FADT_POWER_BUTTON)) {
> +               struct acpi_device *device = NULL;
> +
>                 result = acpi_add_single_object(&device, NULL,
>                                                 ACPI_BUS_TYPE_POWER_BUTTON,
> -                                               ACPI_STA_DEFAULT, true);
> +                                               ACPI_STA_DEFAULT);
> +               if (result)
> +                       return result;
> +
> +               result = device_attach(&device->dev);
> +               if (result < 0)
> +                       return result;
> +
>                 device_init_wakeup(&device->dev, true);
>         }
>
> -       if ((acpi_gbl_FADT.flags & ACPI_FADT_SLEEP_BUTTON) == 0) {
> +       if (!(acpi_gbl_FADT.flags & ACPI_FADT_SLEEP_BUTTON)) {
> +               struct acpi_device *device = NULL;
> +
>                 result = acpi_add_single_object(&device, NULL,
>                                                 ACPI_BUS_TYPE_SLEEP_BUTTON,
> -                                               ACPI_STA_DEFAULT, true);
> +                                               ACPI_STA_DEFAULT);
> +               if (result)
> +                       return result;
> +
> +               result = device_attach(&device->dev);
>         }
>
> -       return result;
> +       return result < 0 ? result : 0;
>  }
>
>  int __init acpi_scan_init(void)
>

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

* Re: [PATCH 1/2] ACPI / scan: Make namespace scanning and trimming mutually exclusive
  2013-01-26 23:19   ` Yinghai Lu
@ 2013-01-29 13:59     ` Steven Newbury
  2013-02-02 11:58     ` Steven Newbury
  1 sibling, 0 replies; 12+ messages in thread
From: Steven Newbury @ 2013-01-29 13:59 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Rafael J. Wysocki, ACPI Devel Maling List, LKML, Bjorn Helgaas,
	Jiang Liu, Toshi Kani

On Sat, 2013-01-26 at 15:19 -0800, Yinghai Lu wrote:
> On Sat, Jan 26, 2013 at 2:41 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> >
> > There is no guarantee that acpi_bus_scan() and acpi_bus_trim() will
> > not be run in parallel for the same scope of the ACPI namespace,
> > which may lead to a great deal of confusion, so introduce a new mutex
> > to prevent that from happening.
> >
> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> Acked-by: Yinghai Lu <yinghai@kernel.org>
> 
> Steven,
> 
> Can you apply this one to for-pci-res-alloc to check if racing with
> docking hotplug/eject
> still happen?
> or wait one or two days after i rebase that branch.
> 
Still get the corrupt acpi_handle.

> Thanks
> 
> Yinghai
> 
> > ---
> >  drivers/acpi/scan.c |   16 ++++++++++++----
> >  1 file changed, 12 insertions(+), 4 deletions(-)
> >
> > Index: linux-pm/drivers/acpi/scan.c
> > ===================================================================
> > --- linux-pm.orig/drivers/acpi/scan.c
> > +++ linux-pm/drivers/acpi/scan.c
> > @@ -52,6 +52,7 @@ static const struct acpi_device_id acpi_
> >
> >  static LIST_HEAD(acpi_device_list);
> >  static LIST_HEAD(acpi_bus_id_list);
> > +static DEFINE_MUTEX(acpi_scan_lock);
> >  DEFINE_MUTEX(acpi_device_lock);
> >  LIST_HEAD(acpi_wakeup_device_list);
> >
> > @@ -1612,19 +1613,22 @@ static acpi_status acpi_bus_device_attac
> >  int acpi_bus_scan(acpi_handle handle)
> >  {
> >         void *device = NULL;
> > +       int error = 0;
> > +
> > +       mutex_lock(&acpi_scan_lock);
> >
> >         if (ACPI_SUCCESS(acpi_bus_check_add(handle, 0, NULL, &device)))
> >                 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
> >                                     acpi_bus_check_add, NULL, NULL, &device);
> >
> >         if (!device)
> > -               return -ENODEV;
> > -
> > -       if (ACPI_SUCCESS(acpi_bus_device_attach(handle, 0, NULL, NULL)))
> > +               error = -ENODEV;
> > +       else if (ACPI_SUCCESS(acpi_bus_device_attach(handle, 0, NULL, NULL)))
> >                 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
> >                                     acpi_bus_device_attach, NULL, NULL, NULL);
> >
> > -       return 0;
> > +       mutex_unlock(&acpi_scan_lock);
> > +       return error;
> >  }
> >  EXPORT_SYMBOL(acpi_bus_scan);
> >
> > @@ -1653,6 +1657,8 @@ static acpi_status acpi_bus_remove(acpi_
> >
> >  void acpi_bus_trim(struct acpi_device *start)
> >  {
> > +       mutex_lock(&acpi_scan_lock);
> > +
> >         /*
> >          * Execute acpi_bus_device_detach() as a post-order callback to detach
> >          * all ACPI drivers from the device nodes being removed.
> > @@ -1667,6 +1673,8 @@ void acpi_bus_trim(struct acpi_device *s
> >         acpi_walk_namespace(ACPI_TYPE_ANY, start->handle, ACPI_UINT32_MAX, NULL,
> >                             acpi_bus_remove, NULL, NULL);
> >         acpi_bus_remove(start->handle, 0, NULL, NULL);
> > +
> > +       mutex_unlock(&acpi_scan_lock);
> >  }
> >  EXPORT_SYMBOL_GPL(acpi_bus_trim);
> >
> >



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

* Re: [PATCH 1/2] ACPI / scan: Make namespace scanning and trimming mutually exclusive
  2013-01-26 23:19   ` Yinghai Lu
  2013-01-29 13:59     ` Steven Newbury
@ 2013-02-02 11:58     ` Steven Newbury
  2013-02-02 20:18       ` Rafael J. Wysocki
  1 sibling, 1 reply; 12+ messages in thread
From: Steven Newbury @ 2013-02-02 11:58 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Rafael J. Wysocki, ACPI Devel Maling List, LKML, Bjorn Helgaas,
	Jiang Liu, Toshi Kani

On Sat, 2013-01-26 at 15:19 -0800, Yinghai Lu wrote:
> On Sat, Jan 26, 2013 at 2:41 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> >
> > There is no guarantee that acpi_bus_scan() and acpi_bus_trim() will
> > not be run in parallel for the same scope of the ACPI namespace,
> > which may lead to a great deal of confusion, so introduce a new mutex
> > to prevent that from happening.
> >
> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> Acked-by: Yinghai Lu <yinghai@kernel.org>
> 
> Steven,
> 
> Can you apply this one to for-pci-res-alloc to check if racing with
> docking hotplug/eject
> still happen?
> or wait one or two days after i rebase that branch.

Tried merging with linux-pm/bleeding-edge, same behaviour:

[ 3589.013578] ACPI: \_SB_.PCI0.PCIE.GDCK: undocking
[ 3589.585356] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=none,decodes=io+mem:owns=none
[ 3589.585422] ACPI: Delete PCI Interrupt Routing Table for 0000:04
[ 3589.585426] pci 0000:03:08.0: Oops, 'acpi_handle' corrupt
[ 3589.585446] pci_bus 0000:04: busn_res: [bus 04] is released

03:08.0 PCI bridge: PLX Technology, Inc. PEX8112 x1 Lane PCI
Express-to-PCI Bridge (rev aa)
04:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI
Manhattan [Mobility Radeon HD 5430 Series]
04:00.1 Audio device: Advanced Micro Devices [AMD] nee ATI Cedar HDMI
Audio [Radeon HD 5400/6300 Series]


> > ---
> >  drivers/acpi/scan.c |   16 ++++++++++++----
> >  1 file changed, 12 insertions(+), 4 deletions(-)
> >
> > Index: linux-pm/drivers/acpi/scan.c
> > ===================================================================
> > --- linux-pm.orig/drivers/acpi/scan.c
> > +++ linux-pm/drivers/acpi/scan.c
> > @@ -52,6 +52,7 @@ static const struct acpi_device_id acpi_
> >
> >  static LIST_HEAD(acpi_device_list);
> >  static LIST_HEAD(acpi_bus_id_list);
> > +static DEFINE_MUTEX(acpi_scan_lock);
> >  DEFINE_MUTEX(acpi_device_lock);
> >  LIST_HEAD(acpi_wakeup_device_list);
> >
> > @@ -1612,19 +1613,22 @@ static acpi_status acpi_bus_device_attac
> >  int acpi_bus_scan(acpi_handle handle)
> >  {
> >         void *device = NULL;
> > +       int error = 0;
> > +
> > +       mutex_lock(&acpi_scan_lock);
> >
> >         if (ACPI_SUCCESS(acpi_bus_check_add(handle, 0, NULL, &device)))
> >                 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
> >                                     acpi_bus_check_add, NULL, NULL, &device);
> >
> >         if (!device)
> > -               return -ENODEV;
> > -
> > -       if (ACPI_SUCCESS(acpi_bus_device_attach(handle, 0, NULL, NULL)))
> > +               error = -ENODEV;
> > +       else if (ACPI_SUCCESS(acpi_bus_device_attach(handle, 0, NULL, NULL)))
> >                 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
> >                                     acpi_bus_device_attach, NULL, NULL, NULL);
> >
> > -       return 0;
> > +       mutex_unlock(&acpi_scan_lock);
> > +       return error;
> >  }
> >  EXPORT_SYMBOL(acpi_bus_scan);
> >
> > @@ -1653,6 +1657,8 @@ static acpi_status acpi_bus_remove(acpi_
> >
> >  void acpi_bus_trim(struct acpi_device *start)
> >  {
> > +       mutex_lock(&acpi_scan_lock);
> > +
> >         /*
> >          * Execute acpi_bus_device_detach() as a post-order callback to detach
> >          * all ACPI drivers from the device nodes being removed.
> > @@ -1667,6 +1673,8 @@ void acpi_bus_trim(struct acpi_device *s
> >         acpi_walk_namespace(ACPI_TYPE_ANY, start->handle, ACPI_UINT32_MAX, NULL,
> >                             acpi_bus_remove, NULL, NULL);
> >         acpi_bus_remove(start->handle, 0, NULL, NULL);
> > +
> > +       mutex_unlock(&acpi_scan_lock);
> >  }
> >  EXPORT_SYMBOL_GPL(acpi_bus_trim);
> >
> >

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

* Re: [PATCH 1/2] ACPI / scan: Make namespace scanning and trimming mutually exclusive
  2013-02-02 11:58     ` Steven Newbury
@ 2013-02-02 20:18       ` Rafael J. Wysocki
  2013-02-02 20:28           ` Steven Newbury
  0 siblings, 1 reply; 12+ messages in thread
From: Rafael J. Wysocki @ 2013-02-02 20:18 UTC (permalink / raw)
  To: Steven Newbury
  Cc: Yinghai Lu, ACPI Devel Maling List, LKML, Bjorn Helgaas,
	Jiang Liu, Toshi Kani

On Saturday, February 02, 2013 11:58:41 AM Steven Newbury wrote:
> On Sat, 2013-01-26 at 15:19 -0800, Yinghai Lu wrote:
> > On Sat, Jan 26, 2013 at 2:41 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> > > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > >
> > > There is no guarantee that acpi_bus_scan() and acpi_bus_trim() will
> > > not be run in parallel for the same scope of the ACPI namespace,
> > > which may lead to a great deal of confusion, so introduce a new mutex
> > > to prevent that from happening.
> > >
> > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > 
> > Acked-by: Yinghai Lu <yinghai@kernel.org>
> > 
> > Steven,
> > 
> > Can you apply this one to for-pci-res-alloc to check if racing with
> > docking hotplug/eject
> > still happen?
> > or wait one or two days after i rebase that branch.
> 
> Tried merging with linux-pm/bleeding-edge, same behaviour:
> 
> [ 3589.013578] ACPI: \_SB_.PCI0.PCIE.GDCK: undocking
> [ 3589.585356] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=none,decodes=io+mem:owns=none
> [ 3589.585422] ACPI: Delete PCI Interrupt Routing Table for 0000:04
> [ 3589.585426] pci 0000:03:08.0: Oops, 'acpi_handle' corrupt
> [ 3589.585446] pci_bus 0000:04: busn_res: [bus 04] is released
> 
> 03:08.0 PCI bridge: PLX Technology, Inc. PEX8112 x1 Lane PCI
> Express-to-PCI Bridge (rev aa)
> 04:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI
> Manhattan [Mobility Radeon HD 5430 Series]
> 04:00.1 Audio device: Advanced Micro Devices [AMD] nee ATI Cedar HDMI
> Audio [Radeon HD 5400/6300 Series]

That's because of a bug in the dock code I believe.

If you're willing to test patches, I can try to cook up something to debug/fix
this.

Thanks,
Rafael


-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

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

* Re: [PATCH 1/2] ACPI / scan: Make namespace scanning and trimming mutually exclusive
  2013-02-02 20:18       ` Rafael J. Wysocki
@ 2013-02-02 20:28           ` Steven Newbury
  0 siblings, 0 replies; 12+ messages in thread
From: Steven Newbury @ 2013-02-02 20:28 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Yinghai Lu, ACPI Devel Maling List, LKML, Bjorn Helgaas,
	Jiang Liu, Toshi Kani

On Sat,   2 Feb 2013, 20:18:28 GMT, Rafael J. Wysocki <rjw@sisk.pl> wrote:

> On Saturday, February 02, 2013 11:58:41 AM Steven Newbury wrote:
> > On Sat, 2013-01-26 at 15:19 -0800, Yinghai Lu wrote:
> > > On Sat, Jan 26, 2013 at 2:41 PM, Rafael J. Wysocki <rjw@sisk.pl>
> > > wrote:
> > > > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > > 
> > > > There is no guarantee that acpi_bus_scan() and acpi_bus_trim() will
> > > > not be run in parallel for the same scope of the ACPI namespace,
> > > > which may lead to a great deal of confusion, so introduce a new
> > > > mutex to prevent that from happening.
> > > > 
> > > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > 
> > > Acked-by: Yinghai Lu <yinghai@kernel.org>
> > > 
> > > Steven,
> > > 
> > > Can you apply this one to for-pci-res-alloc to check if racing with
> > > docking hotplug/eject
> > > still happen?
> > > or wait one or two days after i rebase that branch.
> > 
> > Tried merging with linux-pm/bleeding-edge, same behaviour:
> > 
> > [ 3589.013578] ACPI: \_SB_.PCI0.PCIE.GDCK: undocking
> > [ 3589.585356] vgaarb: device changed decodes:
> > PCI:0000:00:02.0,olddecodes=none,decodes=io+mem:owns=none [
> > 3589.585422] ACPI: Delete PCI Interrupt Routing Table for 0000:04 [
> > 3589.585426] pci 0000:03:08.0: Oops, 'acpi_handle' corrupt [
> > 3589.585446] pci_bus 0000:04: busn_res: [bus 04] is released
> > 
> > 03:08.0 PCI bridge: PLX Technology, Inc. PEX8112 x1 Lane PCI
> > Express-to-PCI Bridge (rev aa)
> > 04:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI
> > Manhattan [Mobility Radeon HD 5430 Series]
> > 04:00.1 Audio device: Advanced Micro Devices [AMD] nee ATI Cedar HDMI
> > Audio [Radeon HD 5400/6300 Series]
> 
> That's because of a bug in the dock code I believe.
> 
> If you're willing to test patches, I can try to cook up something to
> debug/fix this.
Sure, I'm always willing to test patches.
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH 1/2] ACPI / scan: Make namespace scanning and trimming mutually exclusive
@ 2013-02-02 20:28           ` Steven Newbury
  0 siblings, 0 replies; 12+ messages in thread
From: Steven Newbury @ 2013-02-02 20:28 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Yinghai Lu, ACPI Devel Maling List, LKML, Bjorn Helgaas,
	Jiang Liu, Toshi Kani

On Sat,   2 Feb 2013, 20:18:28 GMT, Rafael J. Wysocki <rjw@sisk.pl> wrote:

> On Saturday, February 02, 2013 11:58:41 AM Steven Newbury wrote:
> > On Sat, 2013-01-26 at 15:19 -0800, Yinghai Lu wrote:
> > > On Sat, Jan 26, 2013 at 2:41 PM, Rafael J. Wysocki <rjw@sisk.pl>
> > > wrote:
> > > > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > > 
> > > > There is no guarantee that acpi_bus_scan() and acpi_bus_trim() will
> > > > not be run in parallel for the same scope of the ACPI namespace,
> > > > which may lead to a great deal of confusion, so introduce a new
> > > > mutex to prevent that from happening.
> > > > 
> > > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > 
> > > Acked-by: Yinghai Lu <yinghai@kernel.org>
> > > 
> > > Steven,
> > > 
> > > Can you apply this one to for-pci-res-alloc to check if racing with
> > > docking hotplug/eject
> > > still happen?
> > > or wait one or two days after i rebase that branch.
> > 
> > Tried merging with linux-pm/bleeding-edge, same behaviour:
> > 
> > [ 3589.013578] ACPI: \_SB_.PCI0.PCIE.GDCK: undocking
> > [ 3589.585356] vgaarb: device changed decodes:
> > PCI:0000:00:02.0,olddecodes=none,decodes=io+mem:owns=none [
> > 3589.585422] ACPI: Delete PCI Interrupt Routing Table for 0000:04 [
> > 3589.585426] pci 0000:03:08.0: Oops, 'acpi_handle' corrupt [
> > 3589.585446] pci_bus 0000:04: busn_res: [bus 04] is released
> > 
> > 03:08.0 PCI bridge: PLX Technology, Inc. PEX8112 x1 Lane PCI
> > Express-to-PCI Bridge (rev aa)
> > 04:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI
> > Manhattan [Mobility Radeon HD 5430 Series]
> > 04:00.1 Audio device: Advanced Micro Devices [AMD] nee ATI Cedar HDMI
> > Audio [Radeon HD 5400/6300 Series]
> 
> That's because of a bug in the dock code I believe.
> 
> If you're willing to test patches, I can try to cook up something to
> debug/fix this.
Sure, I'm always willing to test patches.

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

* Re: [PATCH 1/2] ACPI / scan: Make namespace scanning and trimming mutually exclusive
  2013-02-02 20:28           ` Steven Newbury
  (?)
@ 2013-02-02 22:27           ` Rafael J. Wysocki
  2013-02-03  8:45             ` Steven Newbury
  -1 siblings, 1 reply; 12+ messages in thread
From: Rafael J. Wysocki @ 2013-02-02 22:27 UTC (permalink / raw)
  To: Steven Newbury
  Cc: Yinghai Lu, ACPI Devel Maling List, LKML, Bjorn Helgaas,
	Jiang Liu, Toshi Kani

On Saturday, February 02, 2013 08:28:01 PM Steven Newbury wrote:
> On Sat,   2 Feb 2013, 20:18:28 GMT, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> 
> > On Saturday, February 02, 2013 11:58:41 AM Steven Newbury wrote:
> > > On Sat, 2013-01-26 at 15:19 -0800, Yinghai Lu wrote:
> > > > On Sat, Jan 26, 2013 at 2:41 PM, Rafael J. Wysocki <rjw@sisk.pl>
> > > > wrote:
> > > > > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > > > 
> > > > > There is no guarantee that acpi_bus_scan() and acpi_bus_trim() will
> > > > > not be run in parallel for the same scope of the ACPI namespace,
> > > > > which may lead to a great deal of confusion, so introduce a new
> > > > > mutex to prevent that from happening.
> > > > > 
> > > > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > > > 
> > > > Acked-by: Yinghai Lu <yinghai@kernel.org>
> > > > 
> > > > Steven,
> > > > 
> > > > Can you apply this one to for-pci-res-alloc to check if racing with
> > > > docking hotplug/eject
> > > > still happen?
> > > > or wait one or two days after i rebase that branch.
> > > 
> > > Tried merging with linux-pm/bleeding-edge, same behaviour:
> > > 
> > > [ 3589.013578] ACPI: \_SB_.PCI0.PCIE.GDCK: undocking
> > > [ 3589.585356] vgaarb: device changed decodes:
> > > PCI:0000:00:02.0,olddecodes=none,decodes=io+mem:owns=none [
> > > 3589.585422] ACPI: Delete PCI Interrupt Routing Table for 0000:04 [
> > > 3589.585426] pci 0000:03:08.0: Oops, 'acpi_handle' corrupt [
> > > 3589.585446] pci_bus 0000:04: busn_res: [bus 04] is released
> > > 
> > > 03:08.0 PCI bridge: PLX Technology, Inc. PEX8112 x1 Lane PCI
> > > Express-to-PCI Bridge (rev aa)
> > > 04:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI
> > > Manhattan [Mobility Radeon HD 5430 Series]
> > > 04:00.1 Audio device: Advanced Micro Devices [AMD] nee ATI Cedar HDMI
> > > Audio [Radeon HD 5400/6300 Series]
> > 
> > That's because of a bug in the dock code I believe.
> > 
> > If you're willing to test patches, I can try to cook up something to
> > debug/fix this.
> Sure, I'm always willing to test patches.

Can you please test this one in addition to the $subject one:

https://patchwork.kernel.org/patch/2068621/

and see if that helps?

Rafael


-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

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

* Re: [PATCH 1/2] ACPI / scan: Make namespace scanning and trimming mutually exclusive
  2013-02-02 22:27           ` Rafael J. Wysocki
@ 2013-02-03  8:45             ` Steven Newbury
  0 siblings, 0 replies; 12+ messages in thread
From: Steven Newbury @ 2013-02-03  8:45 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Yinghai Lu, ACPI Devel Maling List, LKML, Bjorn Helgaas,
	Jiang Liu, Toshi Kani

On Sat, 2013-02-02 at 23:27 +0100, Rafael J. Wysocki wrote:
> On Saturday, February 02, 2013 08:28:01 PM Steven Newbury wrote:
> > > > Tried merging with linux-pm/bleeding-edge, same behaviour:
> > > > 
> > > > [ 3589.013578] ACPI: \_SB_.PCI0.PCIE.GDCK: undocking
> > > > [ 3589.585356] vgaarb: device changed decodes:
> > > > PCI:0000:00:02.0,olddecodes=none,decodes=io+mem:owns=none [
> > > > 3589.585422] ACPI: Delete PCI Interrupt Routing Table for 0000:04 [
> > > > 3589.585426] pci 0000:03:08.0: Oops, 'acpi_handle' corrupt [
> > > > 3589.585446] pci_bus 0000:04: busn_res: [bus 04] is released
> > > > 
> > > > 03:08.0 PCI bridge: PLX Technology, Inc. PEX8112 x1 Lane PCI
> > > > Express-to-PCI Bridge (rev aa)
> > > > 04:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI
> > > > Manhattan [Mobility Radeon HD 5430 Series]
> > > > 04:00.1 Audio device: Advanced Micro Devices [AMD] nee ATI Cedar HDMI
> > > > Audio [Radeon HD 5400/6300 Series]
> > > 
> > > That's because of a bug in the dock code I believe.
> > > 
> > > If you're willing to test patches, I can try to cook up something to
> > > debug/fix this.
> > Sure, I'm always willing to test patches.
> 
> Can you please test this one in addition to the $subject one:
> 
> https://patchwork.kernel.org/patch/2068621/
> 
> and see if that helps?
No change wrt the "Oops, 'acpi_handle' corrupt".

Just to be clear, this happens during the logical undock phase after
writing to "/sys/devices/platform/dock.0/undock".

Right now I manually tear down the seat associated with the dock gfx
card (waiting for the X server to terminate and requiring SIGSTOPing the
gdm process to stop it respawning!) then attempt radeon module unload,
if it succeeds I write to the undock file, otherwise I fail the undock;
I saw there is intention to put it infrastructure to have drivers
prepare themselves for removal on 'eject' request, that would be really
helpful.

A couple of other things regarding the dock system:

Making an undock/eject request with the dock eject button results in an
ACPI 'undock' event, same ACPI event happens when the
electrical/physical undock occurs.

The IDE docks seem not to be working; maybe I need to turn on some
debugging.  This used to work at some point.

Feb  2 23:51:28 infinity kernel: ACPI: \_SB_.PCI0.IDE1.PRI_.MAST:
docking
Feb  2 23:51:28 infinity kernel: ACPI: \_SB_.PCI0.IDE1.PRI_.MAST: Unable
to dock!



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

end of thread, other threads:[~2013-02-03  8:45 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-26 22:39 [PATCH 0/2] ACPI / scan: Additional changes Rafael J. Wysocki
2013-01-26 22:41 ` [PATCH 1/2] ACPI / scan: Make namespace scanning and trimming mutually exclusive Rafael J. Wysocki
2013-01-26 23:19   ` Yinghai Lu
2013-01-29 13:59     ` Steven Newbury
2013-02-02 11:58     ` Steven Newbury
2013-02-02 20:18       ` Rafael J. Wysocki
2013-02-02 20:28         ` Steven Newbury
2013-02-02 20:28           ` Steven Newbury
2013-02-02 22:27           ` Rafael J. Wysocki
2013-02-03  8:45             ` Steven Newbury
2013-01-26 22:43 ` [PATCH 2/2] ACPI / scan: Make scanning of fixed devices follow the general scheme Rafael J. Wysocki
2013-01-26 23:26   ` Yinghai Lu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.