]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
PM: hibernate: Combine return paths in power_down()
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Sun, 2 Nov 2025 14:25:45 +0000 (09:25 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:36:45 +0000 (15:36 -0500)
[ Upstream commit 1f5bcfe91ffce71bdd1022648b9d501d46d20c09 ]

To avoid code duplication and improve clarity, combine the code
paths in power_down() leading to a return from that function.

No intentional functional impact.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org>
Link: https://patch.msgid.link/3571055.QJadu78ljV@rafael.j.wysocki
[ rjw: Changed the new label name to "exit" ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Stable-dep-of: 35e4a69b2003 ("PM: sleep: Allow pm_restrict_gfp_mask() stacking")
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
kernel/power/hibernate.c

index 728328c51b64996e337c226f6a445a6c401ae0ab..14e85ff235512343be317d028c8dcb9d7b336ce4 100644 (file)
@@ -708,21 +708,11 @@ static void power_down(void)
        if (hibernation_mode == HIBERNATION_SUSPEND) {
                pm_restore_gfp_mask();
                error = suspend_devices_and_enter(mem_sleep_current);
-               if (error) {
-                       hibernation_mode = hibernation_ops ?
-                                               HIBERNATION_PLATFORM :
-                                               HIBERNATION_SHUTDOWN;
-               } else {
-                       /* Match pm_restore_gfp_mask() call in hibernate() */
-                       pm_restrict_gfp_mask();
-
-                       /* Restore swap signature. */
-                       error = swsusp_unmark();
-                       if (error)
-                               pr_err("Swap will be unusable! Try swapon -a.\n");
+               if (!error)
+                       goto exit;
 
-                       return;
-               }
+               hibernation_mode = hibernation_ops ? HIBERNATION_PLATFORM :
+                                                    HIBERNATION_SHUTDOWN;
        }
 #endif
 
@@ -733,12 +723,9 @@ static void power_down(void)
        case HIBERNATION_PLATFORM:
                error = hibernation_platform_enter();
                if (error == -EAGAIN || error == -EBUSY) {
-                       /* Match pm_restore_gfp_mask() in hibernate(). */
-                       pm_restrict_gfp_mask();
-                       swsusp_unmark();
                        events_check_enabled = false;
                        pr_info("Wakeup event detected during hibernation, rolling back.\n");
-                       return;
+                       goto exit;
                }
                fallthrough;
        case HIBERNATION_SHUTDOWN:
@@ -757,6 +744,15 @@ static void power_down(void)
        pr_crit("Power down manually\n");
        while (1)
                cpu_relax();
+
+exit:
+       /* Match the pm_restore_gfp_mask() call in hibernate(). */
+       pm_restrict_gfp_mask();
+
+       /* Restore swap signature. */
+       error = swsusp_unmark();
+       if (error)
+               pr_err("Swap will be unusable! Try swapon -a.\n");
 }
 
 static int load_image_and_restore(void)