On Thu, Nov 4, 2021 at 10:54 PM Rafael J. Wysocki <rjw@xxxxxxxxxxxxx> wrote: > > On Thursday, November 4, 2021 6:21:51 PM CET Rafael J. Wysocki wrote: > > From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > > > > 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 <rafael.j.wysocki@xxxxxxxxx> > > --- > > 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. > --- > From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > 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 <rafael.j.wysocki@xxxxxxxxx> > --- > > -> 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); > > > >