Re: [PATCH] ACPI: PM: Fix device wakeup power reference counting error
From: Rafael J. Wysocki <hidden>
Date: 2021-11-04 21:54:22
Also in:
linux-acpi, lkml
On Thursday, November 4, 2021 6:21:51 PM CET Rafael J. Wysocki wrote:
quoted hunk ↗ jump to hunk
From: Rafael J. Wysocki <redacted> Fix a device wakeup power reference counting error introduced by commit a2d7b2e004af ("ACPI: PM: Fix sharing of wakeup power resources"). Fixes: a2d7b2e004af ("ACPI: PM: Fix sharing of wakeup power resources") Signed-off-by: Rafael J. Wysocki <redacted> --- drivers/acpi/power.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) Index: linux-pm/drivers/acpi/power.c ===================================================================--- linux-pm.orig/drivers/acpi/power.c +++ linux-pm/drivers/acpi/power.c@@ -757,10 +757,8 @@ int acpi_disable_wakeup_device_power(str mutex_lock(&acpi_device_lock); - if (dev->wakeup.prepare_count > 1) { + if (dev->wakeup.prepare_count >= 1) dev->wakeup.prepare_count--; - goto out; - } /* Do nothing if wakeup power has not been enabled for this device. */ if (!dev->wakeup.prepare_count)
This is still not good. It should be something like the patch below, but I
need to test that one.
---
From: Rafael J. Wysocki <redacted>
Subject: [PATCH v2] ACPI: PM: Fix device wakeup power reference counting error
Fix a device wakeup power reference counting error introduced by
commit a2d7b2e004af ("ACPI: PM: Fix sharing of wakeup power
resources").
Fixes: a2d7b2e004af ("ACPI: PM: Fix sharing of wakeup power resources")
Signed-off-by: Rafael J. Wysocki <redacted>
---
-> v2: Actually disable wakeup power when the reference count becomes zero.
---
drivers/acpi/power.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
Index: linux-pm/drivers/acpi/power.c
===================================================================--- linux-pm.orig/drivers/acpi/power.c
+++ linux-pm/drivers/acpi/power.c@@ -757,13 +757,11 @@ int acpi_disable_wakeup_device_power(str mutex_lock(&acpi_device_lock); - if (dev->wakeup.prepare_count > 1) { - dev->wakeup.prepare_count--; + /* Do nothing if wakeup power has not been enabled for this device. */ + if (dev->wakeup.prepare_count <= 0) goto out; - } - /* Do nothing if wakeup power has not been enabled for this device. */ - if (!dev->wakeup.prepare_count) + if (--dev->wakeup.prepare_count > 0) goto out; err = acpi_device_sleep_wake(dev, 0, 0, 0);