linux/drivers/base
Rafael J. Wysocki 3d4195c162 PM: sleep: core: Clear power.must_resume in noirq suspend error path
[ Upstream commit be82483d1b ]

If system suspend is aborted in the "noirq" phase (for instance, due to
an error returned by one of the device callbacks), power.is_noirq_suspended
will not be set for some devices and device_resume_noirq() will return
early for them.  Consequently, noirq resume callbacks will not run for
them at all because the noirq suspend callbacks have not run for them
yet.

If any of them has power.must_resume set and late suspend has been
skipped for it (due to power.smart_suspend), early resume should be
skipped for it either, or its state may become inconsistent (for
instance, if the early resume assumes that it will always follow
noirq resume).

Make that happen by clearing power.must_resume in device_resume_noirq()
for devices with power.is_noirq_suspended clear that have been left in
suspend by device_suspend_late(), which will subsequently cause
device_resume_early() to leave the device in suspend and avoid
changing its state.

Fixes: 0d4b54c6fe ("PM / core: Add LEAVE_SUSPENDED driver flag")
Link: https://lore.kernel.org/linux-pm/5d692b81-6f58-4e86-9cb0-ede69a09d799@rowland.harvard.edu/
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Link: https://patch.msgid.link/3381776.aeNJFYEL58@rafael.j.wysocki
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2025-10-15 11:56:27 +02:00
..
firmware_loader firmware_loader: Block path traversal 2024-10-17 15:21:20 +02:00
power PM: sleep: core: Clear power.must_resume in noirq suspend error path 2025-10-15 11:56:27 +02:00
regmap regmap: Remove superfluous check for !config in __regmap_init() 2025-10-15 11:56:26 +02:00
test driver core: test_async: fix an error code 2023-09-13 09:42:53 +02:00
arch_numa.c arm64: irq: set the correct node for VMAP stack 2024-02-05 20:12:46 +00:00
arch_topology.c RISC-V Patches for the 6.1 Merge Window, Part 1 2022-10-09 13:24:01 -07:00
attribute_container.c driver core: attribute_container: fix W=1 warnings 2021-05-14 13:37:10 +02:00
auxiliary.c Documentation/auxiliary_bus: Move the text into the code 2021-12-03 16:41:50 +01:00
base.h driver core: remove make_class_name declaration 2022-09-09 10:49:54 +02:00
bus.c driver core: bus: Fix double free in driver API bus_register() 2024-12-14 19:54:00 +01:00
cacheinfo.c drivers: base: cacheinfo: Fix shared_cpu_map changes in event of CPU hotplug 2023-06-09 10:34:17 +02:00
class.c class: fix possible memory leak in __class_register() 2022-12-31 13:32:38 +01:00
component.c drivers: base: component: fix memory leak with using debugfs_lookup() 2023-03-11 13:55:39 +01:00
container.c driver core: Remove redundant license text 2017-12-07 18:36:44 +01:00
core.c drivers: core: fix device leak in __fw_devlink_relax_cycles() 2025-03-13 12:53:22 +01:00
cpu.c x86/vmscape: Enable the mitigation 2025-09-11 17:19:15 +02:00
dd.c driver core: Release all resources during unbind before updating device links 2023-11-28 17:07:13 +00:00
devcoredump.c devcoredump: Send uevent once devcd is ready 2023-12-13 18:39:28 +01:00
devres.c drivers: base: devres: Allow to release group on device release 2025-04-25 10:43:32 +02:00
devtmpfs.c devtmpfs: fix the dangling pointer of global devtmpfsd thread 2022-06-27 16:41:13 +02:00
driver.c driver core: fix driver_set_override() issue with empty strings 2022-09-05 13:01:34 +02:00
firmware.c driver core: Remove redundant license text 2017-12-07 18:36:44 +01:00
hypervisor.c driver core: Remove redundant license text 2017-12-07 18:36:44 +01:00
init.c init: Initialize noop_backing_dev_info early 2022-06-16 10:55:57 +02:00
isa.c bus: Make remove callback return void 2021-07-21 11:53:42 +02:00
Kconfig devtmpfs: mount with noexec and nosuid 2021-12-30 13:54:42 +01:00
Makefile driver core: Add sysfs support for physical location of a device 2022-04-27 09:51:57 +02:00
map.c driver: base: Prefer unsigned int to bare use of unsigned 2021-07-21 17:30:09 +02:00
memory.c mm/memory_hotplug: add missing mem_hotplug_lock 2024-01-10 17:10:33 +01:00
module.c Revert "driver core: Fix uevent_show() vs driver detach race" 2024-11-08 16:26:44 +01:00
node.c base/node.c: initialize the accessor list before registering 2024-01-25 15:27:46 -08:00
physical_location.c driver core: location: Free struct acpi_pld_info *pld before return false 2023-03-10 09:33:33 +01:00
physical_location.h driver core: Add sysfs support for physical location of a device 2022-04-27 09:51:57 +02:00
pinctrl.c driver core: Remove redundant license text 2017-12-07 18:36:44 +01:00
platform-msi.c platform-msi: Export symbol platform_msi_create_irq_domain() 2022-09-28 14:21:05 +01:00
platform.c platform: Provide a remove callback that returns no value 2023-05-24 17:32:43 +01:00
property.c device property: Constify device child node APIs 2024-12-14 19:54:28 +01:00
soc.c base: soc: Make soc_device_match() simpler and easier to read 2022-03-18 14:28:07 +01:00
swnode.c software node: Correct a OOB check in software_node_get_reference_args() 2025-06-27 11:07:35 +01:00
syscore.c syscore: Use pm_pr_dbg() for syscore_{suspend,resume}() 2020-09-08 13:32:06 +02:00
topology.c topology: Keep the cpumask unchanged when printing cpumap 2025-01-17 13:34:44 +01:00
trace.c devres: Enable trace events 2021-06-15 17:14:36 +02:00
trace.h devres: Enable trace events 2021-06-15 17:14:36 +02:00
transport_class.c drivers: base: transport_class: fix resource leak when transport_add_device() fails 2023-03-10 09:33:34 +01:00