sst-linux/drivers
Rafael J. Wysocki 72520ca5f9 PM: sleep: Fix handling devices with direct_complete set on errors
[ Upstream commit 03f1444016b71feffa1dfb8a51f15ba592f94b13 ]

When dpm_suspend() fails, some devices with power.direct_complete set
may not have been handled by device_suspend() yet, so runtime PM has
not been disabled for them yet even though power.direct_complete is set.

Since device_resume() expects that runtime PM has been disabled for all
devices with power.direct_complete set, it will attempt to reenable
runtime PM for the devices that have not been processed by device_suspend()
which does not make sense.  Had those devices had runtime PM disabled
before device_suspend() had run, device_resume() would have inadvertently
enable runtime PM for them, but this is not expected to happen because
it would require ->prepare() callbacks to return positive values for
devices with runtime PM disabled, which would be invalid.

In practice, this issue is most likely benign because pm_runtime_enable()
will not allow the "disable depth" counter to underflow, but it causes a
warning message to be printed for each affected device.

To allow device_resume() to distinguish the "direct complete" devices
that have been processed by device_suspend() from those which have not
been handled by it, make device_suspend() set power.is_suspended for
"direct complete" devices.

Next, move the power.is_suspended check in device_resume() before the
power.direct_complete check in it to make it skip the "direct complete"
devices that have not been handled by device_suspend().

This change is based on a preliminary patch from Saravana Kannan.

Fixes: aae4518b31 ("PM / sleep: Mechanism to avoid resuming runtime-suspended devices unnecessarily")
Link: https://lore.kernel.org/linux-pm/20241114220921.2529905-2-saravanak@google.com/
Reported-by: Saravana Kannan <saravanak@google.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Saravana Kannan <saravanak@google.com>
Link: https://patch.msgid.link/12627587.O9o76ZdvQC@rjwysocki.net
Signed-off-by: Sasha Levin <sashal@kernel.org>
2025-04-10 14:33:31 +02:00
..
accessibility
acpi ACPI: resource: IRQ override for Eluktronics MECH-17 2025-03-28 21:58:50 +01:00
amba
android
ata ata: libata-sff: Ensure that we cannot write outside the allocated buffer 2025-02-21 13:49:49 +01:00
atm
auxdisplay
base PM: sleep: Fix handling devices with direct_complete set on errors 2025-04-10 14:33:31 +02:00
bcma
block ublk: set_params: properly check if parameters can be applied 2025-03-13 12:53:18 +01:00
bluetooth bluetooth: btusb: Initialize .owner field of force_poll_sync_fops 2025-03-13 12:53:16 +01:00
bus bus: mhi: host: pci_generic: Use pci_try_reset_function() to avoid deadlock 2025-03-13 12:53:22 +01:00
cdrom
char tpm: Change to kvalloc() in eventlog/acpi.c 2025-03-07 16:56:31 +01:00
clk clk: samsung: update PLL locktime for PLL142XX used on FSD platform 2025-03-28 21:58:57 +01:00
clocksource clockevents/drivers/i8253: Fix stop sequence for timer 0 2025-03-28 21:58:48 +01:00
comedi comedi: Flush partial mappings in error case 2024-12-14 19:53:59 +01:00
connector
counter counter: microchip-tcb-capture: Fix undefined counter channel state on probe 2025-04-07 10:05:45 +02:00
cpufreq cpufreq: governor: Fix negative 'idle_time' handling in dbs_update() 2025-04-10 14:33:30 +02:00
cpuidle cpuidle: riscv-sbi: fix device node release in early exit of for_each_possible_cpu 2025-01-17 13:34:41 +01:00
crypto crypto: qce - unregister previously registered algos in error path 2025-02-21 13:49:49 +01:00
cxl cxl/region: Fix region creation for greater than x2 switches 2024-12-27 13:52:53 +01:00
dax dax: delete a stale directory pmem 2024-12-14 19:53:41 +01:00
dca
devfreq
dio
dma dmaengine: ti: edma: fix OF node reference leaks in edma_driver 2025-02-21 13:49:21 +01:00
dma-buf udmabuf: also check for F_SEAL_FUTURE_WRITE 2024-12-27 13:53:01 +01:00
edac EDAC/ie31200: Fix the error path order of ie31200_init() 2025-04-10 14:33:31 +02:00
eisa
extcon
firewire
firmware efi/libstub: Avoid physical address 0x0 when doing random allocation 2025-03-28 21:59:01 +01:00
fpga fpga: manager: add owner module and take its refcount 2024-12-14 19:53:12 +01:00
fsi
gnss
gpio gpio: rcar: Fix missing of_node_put() call 2025-03-13 12:53:19 +01:00
gpu drm/amd/display: Check denominator crb_pipes before used 2025-04-07 10:05:45 +02:00
greybus
hid HID: hid-plantronics: Add mic mute mapping and generalize quirks 2025-04-07 10:05:44 +02:00
hsi
hte
hv Drivers: hv: vmbus: Don't release fb_mmio resource in vmbus_free_mmio() 2025-03-28 21:58:49 +01:00
hwmon hwmon: fix a NULL vs IS_ERR_OR_NULL() check in xgene_hwmon_probe() 2025-03-13 12:53:17 +01:00
hwspinlock
hwtracing intel_th: pci: Add Panther Lake-P/U support 2025-03-13 12:53:22 +01:00
i2c i2c: omap: fix IRQ storms 2025-03-28 21:59:00 +01:00
i3c i3c: master: cdns: Fix use after free vulnerability in cdns_i3c_master Driver Due to Race Condition 2025-02-21 13:50:10 +01:00
idle cpuidle, intel_idle: Fix CPUIDLE_FLAG_IBRS 2025-03-13 12:53:11 +01:00
iio iio: adc: at91-sama5d2_adc: fix sama7g5 realbits value 2025-03-13 12:53:23 +01:00
infiniband RDMA/hns: Fix wrong value of max_sge_rd 2025-03-28 21:58:59 +01:00
input Input: i8042 - swap old quirk combination with new quirk for more devices 2025-03-28 21:58:56 +01:00
interconnect
iommu iommu/arm-smmu-v3: Clean up more on probe failure 2025-02-21 13:49:33 +01:00
ipack
irqchip irqchip/apple-aic: Only handle PMC interrupt as FIQ when configured so 2025-02-21 13:49:51 +01:00
isdn
leds leds: mlxreg: Use devm_mutex_init() for mutex initialization 2025-03-28 21:58:57 +01:00
macintosh
mailbox mailbox: tegra-hsp: Clear mailbox before using message 2025-02-21 13:49:51 +01:00
mcb
md md/md-bitmap: Synchronize bitmap_get_stats() with bitmap lifetime 2025-03-07 16:56:28 +01:00
media media: i2c: et8ek8: Don't strip remove function when driver is builtin 2025-04-07 10:05:46 +02:00
memory memory: tegra20-emc: fix an OF node reference bug in tegra_emc_find_node_by_ram_code() 2025-02-21 13:49:12 +01:00
memstick memstick: rtsx_usb_ms: Fix slab-use-after-free in rtsx_usb_ms_drv_remove 2025-04-07 10:05:46 +02:00
message scsi: fusion: Remove unused variable 'rc' 2024-12-14 19:53:40 +01:00
mfd mfd: lpc_ich: Add another Gemini Lake ISA bridge PCI device-id 2025-02-21 13:49:31 +01:00
misc eeprom: digsy_mtc: Make GPIO lookup table match the device 2025-03-13 12:53:22 +01:00
mmc mmc: atmel-mci: Add missing clk_disable_unprepare() 2025-03-28 21:59:01 +01:00
most
mtd mtd: rawnand: cadence: fix incorrect device in dma_unmap_single 2025-03-07 16:56:40 +01:00
mux
net net: usb: usbnet: restore usb%d name exception for local mac addresses 2025-04-07 10:05:46 +02:00
nfc
ntb
nubus
nvdimm nvdimm: rectify the illogical code within nd_dax_probe() 2024-12-14 19:54:47 +01:00
nvme nvme-tcp: Fix a C2HTermReq error message 2025-03-28 21:58:58 +01:00
nvmem nvmem: core: improve range check for nvmem_cell_write() 2025-02-21 13:49:50 +01:00
of Revert "of: reserved-memory: Fix using wrong number of cells to get property 'alignment'" 2025-03-13 12:53:11 +01:00
opp OPP: OF: Fix an OF node leak in _opp_add_static_v2() 2025-02-21 13:49:02 +01:00
parisc
parport parport_pc: add support for ASIX AX99100 2025-02-21 13:50:11 +01:00
pci PCI: switchtec: Add Microchip PCI100X device IDs 2025-02-21 13:49:59 +01:00
pcmcia
peci
perf perf/arm-cmn: Ensure port and device id bits are set properly 2024-12-14 19:54:09 +01:00
phy phy: exynos5-usbdrd: fix MPLL_MULTIPLIER and SSC_REFCLKSEL masks in refclk 2025-03-07 16:56:50 +01:00
pinctrl pinctrl: bcm281xx: Fix incorrect regmap max_registers value 2025-03-28 21:58:48 +01:00
platform platform/x86: thinkpad_acpi: Support for V9 DYTC platform profiles 2025-03-28 21:58:51 +01:00
pnp
power power: supply: da9150-fg: fix potential overflow 2025-03-07 16:56:37 +01:00
powercap powercap: call put_device() on an error path in powercap_register_control_type() 2025-03-28 21:58:50 +01:00
pps pps: Fix a use-after-free 2025-02-21 13:49:55 +01:00
ps3
ptp pps: Fix a use-after-free 2025-02-21 13:49:55 +01:00
pwm pwm: stm32: Add check for clk_enable() 2025-02-21 13:49:05 +01:00
rapidio rapidio: fix an API misues when rio_add_net() fails 2025-03-13 12:53:15 +01:00
ras
regulator regulator: check that dummy regulator has been probed before using it 2025-03-28 21:59:00 +01:00
remoteproc remoteproc: core: Fix ida_free call while not allocated 2025-02-21 13:49:27 +01:00
reset
rpmsg rpmsg: glink: use only lower 16-bits of param2 for CMD_OPEN name length 2024-12-14 19:53:47 +01:00
rtc rtc: zynqmp: Fix optional clock name property 2025-02-21 13:49:53 +01:00
s390 s390/cio: Fix CHPID "configure" attribute caching 2025-03-28 21:58:51 +01:00
sbus
scsi scsi: qla1280: Fix kernel oops when debug level > 2 2025-03-28 21:58:50 +01:00
sh sh: clk: Fix clk_enable() to return 0 on NULL clk 2024-12-27 13:52:58 +01:00
siox
slimbus slimbus: messaging: Free transaction ID in delayed interrupt scenario 2025-03-13 12:53:22 +01:00
soc soc: qcom: pdr: Fix the potential deadlock 2025-03-28 21:59:01 +01:00
soundwire
spi spi-mxs: Fix chipselect glitch 2025-03-13 12:53:24 +01:00
spmi
ssb
staging staging: media: max96712: fix kernel oops when removing module 2025-02-21 13:49:28 +01:00
target scsi: target: core: Fix null-ptr-deref in target_alloc_device() 2024-11-01 01:56:00 +01:00
tc
tee tee: optee: Fix supplicant wait loop 2025-03-07 16:56:38 +01:00
thermal thermal: int340x: Add NULL check for adev 2025-04-10 14:33:31 +02:00
thunderbolt thunderbolt: Don't display nvm_version unless upgrade supported 2025-01-09 13:29:56 +01:00
tty serial: 8250_dma: terminate correct DMA in tx_dma_flush() 2025-04-07 10:05:46 +02:00
ufs scsi: ufs: bsg: Set bsg_queue to NULL after removal 2025-02-21 13:49:59 +01:00
uio
usb usb: typec: ucsi: Fix NULL pointer access 2025-04-07 10:05:46 +02:00
vdpa vdpa/mlx5: Fix suboptimal range on iotlb iteration 2024-12-14 19:53:48 +01:00
vfio vfio/pci: Enable iowrite64 and ioread64 for vfio pci 2025-02-21 13:49:59 +01:00
vhost
video fbdev: hyperv_fb: iounmap() the correct memory when removing a device 2025-03-28 21:58:48 +01:00
virt drivers: virt: acrn: hsm: Use kzalloc to avoid info leak in pmcmd_ioctl 2025-03-13 12:53:23 +01:00
virtio
vlynq
w1
watchdog watchdog: it87_wdt: add PWRGD enable quirk for Qotom QCML04 2025-01-02 10:30:51 +01:00
xen Xen/swiotlb: mark xen_swiotlb_fixup() __init 2025-03-28 21:58:51 +01:00
zorro
Kconfig
Makefile