Re: [PATCH] ACPI: PM: Fix device wakeup power reference counting error
From: "Rafael J. Wysocki" <rafael@kernel.org>
Date: 2021-11-05 14:39:31
Also in:
linux-acpi, lkml
On Thu, Nov 4, 2021 at 10:54 PM Rafael J. Wysocki [off-list ref] wrote:
On Thursday, November 4, 2021 6:21:51 PM CET Rafael J. Wysocki wrote:quoted
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.
Tested now, so applying as 5.16-rc material.
quoted hunk ↗ jump to hunk
--- 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);