ACPI / property: Fix subnode lookup scope for data-only subnodes
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 20 Oct 2015 16:32:27 +0000 (18:32 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 21 Oct 2015 22:54:03 +0000 (00:54 +0200)
The correct scope for looking up the objects to generate data packages for
data-only subnodes pointed to by another data-only subnode is the scope
of the parent of that subnode and not the scope containing the _DSD object
at the top of the hierarchy (the latter works only if all of the objects
returning data-only subnode packages in a given hierarchy are in the same
scope).

Fix the code to work as expected.

Fixes: 445b0eb058f5 (ACPI / property: Add support for data-only subnodes)
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
drivers/acpi/property.c

index 14654435c295495064974eeffc680f290e41c3ed..88f4306744c0aa23cb1b8b38ecf7f8df9c38b5f1 100644 (file)
@@ -71,7 +71,14 @@ static bool acpi_nondev_subnode_ok(acpi_handle scope,
        if (acpi_extract_properties(buf.pointer, &dn->data))
                dn->handle = handle;
 
-       if (acpi_enumerate_nondev_subnodes(scope, buf.pointer, &dn->data))
+       /*
+        * The scope for the subnode object lookup is the one of the namespace
+        * node (device) containing the object that has returned the package.
+        * That is, it's the scope of that object's parent.
+        */
+       status = acpi_get_parent(handle, &scope);
+       if (ACPI_SUCCESS(status)
+           && acpi_enumerate_nondev_subnodes(scope, buf.pointer, &dn->data))
                dn->handle = handle;
 
        if (dn->handle) {