]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
PM: sleep: Allow pm_restrict_gfp_mask() stacking
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 28 Oct 2025 20:52:31 +0000 (21:52 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 29 Oct 2025 17:55:32 +0000 (18:55 +0100)
commit35e4a69b2003f20a69e7d19ae96ab1eef1aa8e8d
treef83aea40520cf4e7a4f706958b6ebe5c00a824ba
parent79816d4b9e9b9bb03d5d871c04c97b1bce102b14
PM: sleep: Allow pm_restrict_gfp_mask() stacking

Allow pm_restrict_gfp_mask() to be called many times in a row to avoid
issues with calling dpm_suspend_start() when the GFP mask has been
already restricted.

Only the first invocation of pm_restrict_gfp_mask() will actually
restrict the GFP mask and the subsequent calls will warn if there is
a mismatch between the expected allowed GFP mask and the actual one.

Moreover, if pm_restrict_gfp_mask() is called many times in a row,
pm_restore_gfp_mask() needs to be called matching number of times in
a row to actually restore the GFP mask.  Calling it when the GFP mask
has not been restricted will cause it to warn.

This is necessary for the GFP mask restriction starting in
hibernation_snapshot() to continue throughout the entire hibernation
flow until it completes or it is aborted (either by a wakeup event or
by an error).

Fixes: 449c9c02537a1 ("PM: hibernate: Restrict GFP mask in hibernation_snapshot()")
Fixes: 469d80a3712c ("PM: hibernate: Fix hybrid-sleep")
Reported-by: Askar Safin <safinaskar@gmail.com>
Closes: https://lore.kernel.org/linux-pm/20251025050812.421905-1-safinaskar@gmail.com/
Link: https://lore.kernel.org/linux-pm/20251028111730.2261404-1-safinaskar@gmail.com/
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org>
Tested-by: Mario Limonciello (AMD) <superm1@kernel.org>
Cc: 6.16+ <stable@vger.kernel.org> # 6.16+
Link: https://patch.msgid.link/5935682.DvuYhMxLoT@rafael.j.wysocki
kernel/power/hibernate.c
kernel/power/main.c