diff mbox series

[1/1] ACPI: property: Ignore already existing data node tags

Message ID 20220824115956.1971171-1-sakari.ailus@linux.intel.com
State Accepted
Commit 2ea3b19792dbe32287b0c48f3ff7e866f61967c7
Headers show
Series [1/1] ACPI: property: Ignore already existing data node tags | expand

Commit Message

Sakari Ailus Aug. 24, 2022, 11:59 a.m. UTC
ACPI node pointers are attached to data node handles, in order to resolve
string references to them. _DSD guide allows the same node to be reached
from multiple parent nodes, leading the node enumeration algorithm to each
such nodes more than once. As attached data already already exists,
attaching data with the same tag will fail. Address this problem by
ignoring nodes that have been already tagged.

Fixes: 1d52f10917a7 ("ACPI: property: Tie data nodes to acpi handles")
Reported-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 drivers/acpi/property.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Rafael J. Wysocki Aug. 24, 2022, 6:38 p.m. UTC | #1
On Wed, Aug 24, 2022 at 2:00 PM Sakari Ailus
<sakari.ailus@linux.intel.com> wrote:
>
> ACPI node pointers are attached to data node handles, in order to resolve
> string references to them. _DSD guide allows the same node to be reached
> from multiple parent nodes, leading the node enumeration algorithm to each
> such nodes more than once. As attached data already already exists,
> attaching data with the same tag will fail. Address this problem by
> ignoring nodes that have been already tagged.
>
> Fixes: 1d52f10917a7 ("ACPI: property: Tie data nodes to acpi handles")
> Reported-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> Tested-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> ---
>  drivers/acpi/property.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
> index 7b3ad8ed2f4e6..fa97b31214a83 100644
> --- a/drivers/acpi/property.c
> +++ b/drivers/acpi/property.c
> @@ -370,7 +370,7 @@ static bool acpi_tie_nondev_subnodes(struct acpi_device_data *data)
>                 bool ret;
>
>                 status = acpi_attach_data(dn->handle, acpi_nondev_subnode_tag, dn);
> -               if (ACPI_FAILURE(status)) {
> +               if (ACPI_FAILURE(status) && status != AE_ALREADY_EXISTS) {
>                         acpi_handle_err(dn->handle, "Can't tag data node\n");
>                         return false;
>                 }
> --

Applied, thanks!
diff mbox series

Patch

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index 7b3ad8ed2f4e6..fa97b31214a83 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -370,7 +370,7 @@  static bool acpi_tie_nondev_subnodes(struct acpi_device_data *data)
 		bool ret;
 
 		status = acpi_attach_data(dn->handle, acpi_nondev_subnode_tag, dn);
-		if (ACPI_FAILURE(status)) {
+		if (ACPI_FAILURE(status) && status != AE_ALREADY_EXISTS) {
 			acpi_handle_err(dn->handle, "Can't tag data node\n");
 			return false;
 		}