linux/drivers/acpi
Rafael J. Wysocki 7482c5cb90 PM: ACPI: PCI: Drop acpi_pm_set_bridge_wakeup()
The idea behind acpi_pm_set_bridge_wakeup() was to allow bridges to
be reference counted for wakeup enabling, because they may be enabled
to signal wakeup on behalf of their subordinate devices and that
may happen for multiple times in a row, whereas for the other devices
it only makes sense to enable wakeup signaling once.

However, this becomes problematic if the bridge itself is suspended,
because it is treated as a "regular" device in that case and the
reference counting doesn't work.

For instance, suppose that there are two devices below a bridge and
they both can signal wakeup.  Every time one of them is suspended,
wakeup signaling is enabled for the bridge, so when they both have
been suspended, the bridge's wakeup reference counter value is 2.

Say that the bridge is suspended subsequently and acpi_pci_wakeup()
is called for it.  Because the bridge can signal wakeup, that
function will invoke acpi_pm_set_device_wakeup() to configure it
and __acpi_pm_set_device_wakeup() will be called with the last
argument equal to 1.  This causes __acpi_device_wakeup_enable()
invoked by it to omit the reference counting, because the reference
counter of the target device (the bridge) is 2 at that time.

Now say that the bridge resumes and one of the device below it
resumes too, so the bridge's reference counter becomes 0 and
wakeup signaling is disabled for it, but there is still the other
suspended device which may need the bridge to signal wakeup on its
behalf and that is not going to work.

To address this scenario, use wakeup enable reference counting for
all devices, not just for bridges, so drop the last argument from
__acpi_device_wakeup_enable() and __acpi_pm_set_device_wakeup(),
which causes acpi_pm_set_device_wakeup() and
acpi_pm_set_bridge_wakeup() to become identical, so drop the latter
and use the former instead of it everywhere.

Fixes: 1ba51a7c14 ("ACPI / PCI / PM: Rework acpi_pci_propagate_wakeup()")
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Cc: 4.14+ <stable@vger.kernel.org> # 4.14+
2020-12-07 13:45:11 +01:00
..
acpica ACPICA: Add missing type casts in GPE register access code 2020-10-19 14:46:39 +02:00
apei arch-cleanup-2020-10-22 2020-10-23 10:06:38 -07:00
arm64 dma-mapping updates for 5.10 2020-10-15 14:43:29 -07:00
dptf ACPI: DPTF: Add ACPI_DPTF Kconfig menu 2020-10-16 18:16:39 +02:00
nfit ACPI: NFIT: Fix comparison to '-ENXIO' 2020-10-27 19:34:56 +01:00
numa ACPI updates for 5.10-rc1 2020-10-14 11:42:04 -07:00
pmic ACPI / PMIC: Move TPS68470 OpRegion driver to drivers/acpi/pmic/ 2020-09-15 19:40:59 +02:00
x86 ACPI: Convert to new X86 CPU match macros 2020-03-24 21:30:50 +01:00
ac.c Merge branches 'acpi-mm', 'acpi-tables', 'acpi-apei' and 'acpi-misc' 2020-08-03 13:14:42 +02:00
acpi_adxl.c
acpi_amba.c
acpi_apd.c ACPI: APD: Clean up header file include statements 2020-09-25 12:48:11 +02:00
acpi_cmos_rtc.c ACPI: cmos_rtc: Remove leftover ACPI_MODULE_NAME() 2020-09-25 18:25:51 +02:00
acpi_configfs.c ACPI: configfs: Add missing config_item_put() to fix refcount leak 2020-09-25 18:08:39 +02:00
acpi_dbg.c ACPI: debug: don't allow debugging when ACPI is disabled 2020-10-16 17:58:52 +02:00
acpi_extlog.c ACPI / extlog: Check for RDMSR failure 2020-10-02 19:01:55 +02:00
acpi_ipmi.c
acpi_lpat.c
acpi_lpit.c ACPI: LPIT: Put the low power idle table after using it 2020-05-09 11:29:16 +02:00
acpi_lpss.c drm next for 5.10-rc1 2020-10-15 10:46:16 -07:00
acpi_memhotplug.c mm/memory_hotplug: prepare passing flags to add_memory() and friends 2020-10-16 11:11:18 -07:00
acpi_pad.c This tree adds the sched_set_fifo*() encapsulation APIs to remove 2020-08-06 11:55:43 -07:00
acpi_platform.c ACPI: platform: Remove ACPI_MODULE_NAME() 2020-09-25 18:25:51 +02:00
acpi_pnp.c PNP: ACPI: Fix missing-prototypes in acpi_pnp.c 2020-09-25 18:11:33 +02:00
acpi_processor.c ACPI: processor: remove comment regarding string _UID support 2020-10-16 18:11:27 +02:00
acpi_tad.c PM: sleep: core: Rename DPM_FLAG_LEAVE_SUSPENDED 2020-04-24 21:34:22 +02:00
acpi_video.c ACPI: video: remove redundant assignments to variable result 2020-03-04 10:43:04 +01:00
acpi_watchdog.c ACPI: watchdog: Put the watchdog action table after parsing 2020-05-09 11:29:17 +02:00
battery.c ACPI: procfs: Remove last dirs after being marked deprecated for a decade 2020-06-22 16:55:47 +02:00
bgrt.c
blacklist.c ACPI: blacklist: fix clang warning for unused DMI table 2019-07-11 22:45:00 +02:00
bus.c USB/PHY/Thunderbolt driver patches for 5.10-rc1 2020-10-15 09:51:18 -07:00
button.c ACPI: button: Drop no longer necessary Acer SW5-012 lid_init_state quirk 2020-10-28 13:58:55 +01:00
container.c ACPI: container: Remove leftover ACPICA debug functionality 2020-09-25 18:25:51 +02:00
cppc_acpi.c ACPI: CPPC: Fix reference count leak in acpi_cppc_processor_probe() 2020-05-28 13:47:53 +02:00
custom_method.c ACPI: custom_method: Remove dead ACPICA debug code 2020-09-25 18:25:51 +02:00
debugfs.c ACPI: debugfs: Remove dead ACPICA debug code 2020-09-25 18:25:51 +02:00
device_pm.c PM: ACPI: PCI: Drop acpi_pm_set_bridge_wakeup() 2020-12-07 13:45:11 +01:00
device_sysfs.c
dock.c ACPI: dock: fix enum-conversion warning 2020-10-27 19:30:27 +01:00
ec_sys.c
ec.c ACPI: EC: PM: Drop ec_no_wakeup check from acpi_ec_dispatch_gpe() 2020-10-06 12:31:31 +02:00
event.c ACPI: event: Remove leftover ACPICA debug code 2020-09-25 18:25:51 +02:00
evged.c ACPI: Use fallthrough pseudo-keyword 2020-07-09 14:09:28 +02:00
fan.c ACPI: fan: Fix Tiger Lake ACPI device ID 2020-06-30 19:32:45 +02:00
glue.c
hed.c
internal.h ACPI: EC: PM: Avoid premature returns from acpi_s2idle_wake() 2020-05-11 10:11:38 +02:00
ioapic.c
irq.c Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2019-07-08 11:01:13 -07:00
Kconfig ACPI / PMIC: Move TPS68470 OpRegion driver to drivers/acpi/pmic/ 2020-09-15 19:40:59 +02:00
Makefile ACPI / PMIC: Move TPS68470 OpRegion driver to drivers/acpi/pmic/ 2020-09-15 19:40:59 +02:00
nvs.c
osi.c ACPI: OSI: Shoot duplicate word 2019-11-13 11:12:08 +01:00
osl.c ACPI: OSL: Make ACPICA use logical addresses of GPE blocks 2020-09-11 16:45:00 +02:00
pci_irq.c ACPI / PCI: fix acpi_pci_irq_enable() memory leak 2019-09-03 09:41:25 +02:00
pci_link.c ACPI: Delete unused proc filename macros 2020-05-14 13:49:33 +02:00
pci_mcfg.c PCI/ACPI: Add Ampere Altra SOC MCFG quirk 2020-09-17 12:27:43 -05:00
pci_root.c Merge branches 'acpi-extlog', 'acpi-memhotplug', 'acpi-button', 'acpi-tools' and 'acpi-pci' 2020-10-13 14:45:36 +02:00
pci_slot.c ACPI: PCI: Remove unused ACPICA debug code 2020-09-25 18:25:51 +02:00
power.c ACPI: Delete unused proc filename macros 2020-05-14 13:49:33 +02:00
pptt.c ACPI: PPTT: Consistently use unsigned int as parameter type 2020-01-07 11:46:36 +01:00
proc.c ACPI: proc: Remove dead ACPICA debug code 2020-09-25 18:25:51 +02:00
processor_core.c ACPI: processor: Remove dead ACPICA debug code 2020-09-25 18:25:51 +02:00
processor_driver.c cpufreq: Use per-policy frequency QoS 2019-10-21 02:05:21 +02:00
processor_idle.c ACPI: processor: Fix build for ARCH_APICTIMER_STOPS_ON_C3 unset 2020-09-23 13:50:12 +02:00
processor_pdc.c
processor_perflib.c ACPI: processor: Add QoS requests for all CPUs 2019-10-25 11:33:48 +02:00
processor_thermal.c ACPI: processor: Remove dead ACPICA debug code 2020-09-25 18:25:51 +02:00
processor_throttling.c x86: ACPI: fix CPU hotplug deadlock 2020-04-04 16:28:24 +02:00
property.c for-5.9/drivers-20200803 2020-08-05 10:51:40 -07:00
reboot.c ACPI: reboot: Avoid racing after writing to ACPI RESET_REG 2020-10-16 18:04:52 +02:00
resource.c ACPI: Use fallthrough pseudo-keyword 2020-07-09 14:09:28 +02:00
sbs.c ACPI: Delete unused proc filename macros 2020-05-14 13:49:33 +02:00
sbshc.c
sbshc.h ACPI: SBS: remove unused const variable 'SMBUS_PEC' 2019-08-23 12:55:09 +02:00
scan.c dma-mapping updates for 5.10 2020-10-15 14:43:29 -07:00
sleep.c ACPI updates for 5.8-rc1 2020-06-02 13:25:52 -07:00
sleep.h ACPI: PM: Add acpi_[un]register_wakeup_handler() 2020-04-04 19:45:18 +02:00
spcr.c ACPI: Use fallthrough pseudo-keyword 2020-07-09 14:09:28 +02:00
sysfs.c Merge back sysfs-related ACPI material for v5.9. 2020-06-29 13:49:49 +02:00
tables.c ACPI: tables: Remove the duplicated checks for acpi_parse_entries_array() 2020-07-27 15:19:12 +02:00
thermal.c acpi: thermal: Don't call thermal_zone_device_is_enabled() 2020-07-07 01:26:06 +02:00
tiny-power-button.c ACPI: tiny-power-button: Remove dead ACPICA debug code 2020-09-25 18:25:51 +02:00
utils.c ACPI: utils: remove unreachable breaks 2020-10-22 18:58:26 +02:00
video_detect.c Merge branch 'acpi-misc' 2020-10-13 14:44:57 +02:00
wakeup.c ACPI: wakeup: Remove dead ACPICA debug code 2020-09-25 18:25:51 +02:00