PM: hibernate: remove the global snapshot_test variable
authorChristoph Hellwig <hch@lst.de>
Wed, 31 May 2023 12:55:14 +0000 (14:55 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 5 Jun 2023 16:55:20 +0000 (10:55 -0600)
Passing call dependent variable in global variables is a huge
antipattern.  Fix it up.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Rafael J. Wysocki <rafael@kernel.org>
Link: https://lore.kernel.org/r/20230531125535.676098-4-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
kernel/power/hibernate.c
kernel/power/power.h
kernel/power/swap.c

index 0727950..78696aa 100644 (file)
@@ -64,7 +64,6 @@ enum {
 static int hibernation_mode = HIBERNATION_SHUTDOWN;
 
 bool freezer_test_done;
-bool snapshot_test;
 
 static const struct platform_hibernation_ops *hibernation_ops;
 
@@ -684,7 +683,7 @@ static void power_down(void)
                cpu_relax();
 }
 
-static int load_image_and_restore(void)
+static int load_image_and_restore(bool snapshot_test)
 {
        int error;
        unsigned int flags;
@@ -721,6 +720,7 @@ static int load_image_and_restore(void)
  */
 int hibernate(void)
 {
+       bool snapshot_test = false;
        unsigned int sleep_flags;
        int error;
 
@@ -748,9 +748,6 @@ int hibernate(void)
        if (error)
                goto Exit;
 
-       /* protected by system_transition_mutex */
-       snapshot_test = false;
-
        lock_device_hotplug();
        /* Allocate memory management structures */
        error = create_basic_memory_bitmaps();
@@ -792,9 +789,9 @@ int hibernate(void)
        unlock_device_hotplug();
        if (snapshot_test) {
                pm_pr_dbg("Checking hibernation image\n");
-               error = swsusp_check();
+               error = swsusp_check(snapshot_test);
                if (!error)
-                       error = load_image_and_restore();
+                       error = load_image_and_restore(snapshot_test);
        }
        thaw_processes();
 
@@ -982,8 +979,6 @@ static int software_resume(void)
         */
        mutex_lock_nested(&system_transition_mutex, SINGLE_DEPTH_NESTING);
 
-       snapshot_test = false;
-
        if (!swsusp_resume_device) {
                error = find_resume_device();
                if (error)
@@ -994,7 +989,7 @@ static int software_resume(void)
                MAJOR(swsusp_resume_device), MINOR(swsusp_resume_device));
 
        pm_pr_dbg("Looking for hibernation image.\n");
-       error = swsusp_check();
+       error = swsusp_check(false);
        if (error)
                goto Unlock;
 
@@ -1022,7 +1017,7 @@ static int software_resume(void)
                goto Close_Finish;
        }
 
-       error = load_image_and_restore();
+       error = load_image_and_restore(false);
        thaw_processes();
  Finish:
        pm_notifier_call_chain(PM_POST_RESTORE);
index b83c8d5..978189f 100644 (file)
@@ -59,7 +59,6 @@ asmlinkage int swsusp_save(void);
 
 /* kernel/power/hibernate.c */
 extern bool freezer_test_done;
-extern bool snapshot_test;
 
 extern int hibernation_snapshot(int platform_mode);
 extern int hibernation_restore(int platform_mode);
@@ -174,7 +173,7 @@ extern int swsusp_swap_in_use(void);
 #define SF_HW_SIG              8
 
 /* kernel/power/hibernate.c */
-extern int swsusp_check(void);
+int swsusp_check(bool snapshot_test);
 extern void swsusp_free(void);
 extern int swsusp_read(unsigned int *flags_p);
 extern int swsusp_write(unsigned int flags);
index 801c411..81aec3b 100644 (file)
@@ -1514,7 +1514,7 @@ end:
  *      swsusp_check - Check for swsusp signature in the resume device
  */
 
-int swsusp_check(void)
+int swsusp_check(bool snapshot_test)
 {
        int error;
        void *holder;