From: "Luis R. Rodriguez" <mcgrof@kernel.org> To: viro@zeniv.linux.org.uk, bart.vanassche@wdc.com, ming.lei@redhat.com, tytso@mit.edu, darrick.wong@oracle.com, jikos@kernel.org, rjw@rjwysocki.net, pavel@ucw.cz, len.brown@intel.com, linux-fsdevel@vger.kernel.org Cc: boris.ostrovsky@oracle.com, jgross@suse.com, todd.e.brandt@linux.intel.com, nborisov@suse.com, jack@suse.cz, martin.petersen@oracle.com, ONeukum@suse.com, oleksandr@natalenko.name, oleg.b.antonyan@gmail.com, linux-pm@vger.kernel.org, linux-block@vger.kernel.org, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, "Luis R. Rodriguez" <mcgrof@kernel.org> Subject: [RFC 5/5] pm: remove kernel thread freezing Date: Tue, 3 Oct 2017 11:53:13 -0700 Message-ID: <20171003185313.1017-6-mcgrof@kernel.org> (raw) In-Reply-To: <20171003185313.1017-1-mcgrof@kernel.org> Now that all filesystems which used to rely on kthread freezing have been converted to filesystem freeze/thawing we can remove the kernel kthread freezer. Signed-off-by: Luis R. Rodriguez <mcgrof@kernel.org> --- Documentation/power/freezing-of-tasks.txt | 9 ------ drivers/xen/manage.c | 6 ---- include/linux/freezer.h | 4 --- kernel/power/hibernate.c | 10 ++----- kernel/power/power.h | 20 +------------ kernel/power/process.c | 47 ------------------------------- kernel/power/user.c | 9 ------ tools/power/pm-graph/analyze_suspend.py | 1 - 8 files changed, 3 insertions(+), 103 deletions(-) diff --git a/Documentation/power/freezing-of-tasks.txt b/Documentation/power/freezing-of-tasks.txt index af005770e767..477559f57c95 100644 --- a/Documentation/power/freezing-of-tasks.txt +++ b/Documentation/power/freezing-of-tasks.txt @@ -71,15 +71,6 @@ Rationale behind the functions dealing with freezing and thawing of tasks: freeze_processes(): - freezes only userspace tasks -freeze_kernel_threads(): - - freezes all tasks (including kernel threads) because we can't freeze - kernel threads without freezing userspace tasks - -thaw_kernel_threads(): - - thaws only kernel threads; this is particularly useful if we need to do - anything special in between thawing of kernel threads and thawing of - userspace tasks, or if we want to postpone the thawing of userspace tasks - thaw_processes(): - thaws all tasks (including kernel threads) because we can't thaw userspace tasks without thawing kernel threads diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c index c425d03d37d2..8ca0e0c9a7d5 100644 --- a/drivers/xen/manage.c +++ b/drivers/xen/manage.c @@ -109,12 +109,6 @@ static void do_suspend(void) goto out; } - err = freeze_kernel_threads(); - if (err) { - pr_err("%s: freeze kernel threads failed %d\n", __func__, err); - goto out_thaw; - } - err = dpm_suspend_start(PMSG_FREEZE); if (err) { pr_err("%s: dpm_suspend_start %d\n", __func__, err); diff --git a/include/linux/freezer.h b/include/linux/freezer.h index dd03e837ebb7..037ef3f16173 100644 --- a/include/linux/freezer.h +++ b/include/linux/freezer.h @@ -43,9 +43,7 @@ extern void __thaw_task(struct task_struct *t); extern bool __refrigerator(bool check_kthr_stop); extern int freeze_processes(void); -extern int freeze_kernel_threads(void); extern void thaw_processes(void); -extern void thaw_kernel_threads(void); /* * DO NOT ADD ANY NEW CALLERS OF THIS FUNCTION @@ -263,9 +261,7 @@ static inline void __thaw_task(struct task_struct *t) {} static inline bool __refrigerator(bool check_kthr_stop) { return false; } static inline int freeze_processes(void) { return -ENOSYS; } -static inline int freeze_kernel_threads(void) { return -ENOSYS; } static inline void thaw_processes(void) {} -static inline void thaw_kernel_threads(void) {} static inline bool try_to_freeze_nowarn(void) { return false; } static inline bool try_to_freeze(void) { return false; } diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index a5c36e9c56a6..7c3af084b10a 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -352,10 +352,6 @@ int hibernation_snapshot(int platform_mode) if (error) goto Close; - error = freeze_kernel_threads(); - if (error) - goto Cleanup; - if (hibernation_test(TEST_FREEZER)) { /* @@ -363,13 +359,13 @@ int hibernation_snapshot(int platform_mode) * successful freezer test. */ freezer_test_done = true; - goto Thaw; + goto Cleanup; } error = dpm_prepare(PMSG_FREEZE); if (error) { dpm_complete(PMSG_RECOVER); - goto Thaw; + goto Cleanup; } suspend_console(); @@ -405,8 +401,6 @@ int hibernation_snapshot(int platform_mode) platform_end(platform_mode); return error; - Thaw: - thaw_kernel_threads(); Cleanup: swsusp_free(); goto Close; diff --git a/kernel/power/power.h b/kernel/power/power.h index 1d2d761e3c25..333bde062e42 100644 --- a/kernel/power/power.h +++ b/kernel/power/power.h @@ -253,25 +253,7 @@ extern int pm_test_level; #ifdef CONFIG_SUSPEND_FREEZER static inline int suspend_freeze_processes(void) { - int error; - - error = freeze_processes(); - /* - * freeze_processes() automatically thaws every task if freezing - * fails. So we need not do anything extra upon error. - */ - if (error) - return error; - - error = freeze_kernel_threads(); - /* - * freeze_kernel_threads() thaws only kernel threads upon freezing - * failure. So we have to thaw the userspace tasks ourselves. - */ - if (error) - thaw_processes(); - - return error; + return freeze_processes(); } static inline void suspend_thaw_processes(void) diff --git a/kernel/power/process.c b/kernel/power/process.c index 9d1277768312..2e223555b764 100644 --- a/kernel/power/process.c +++ b/kernel/power/process.c @@ -169,33 +169,6 @@ int freeze_processes(void) return error; } -/** - * freeze_kernel_threads - Make freezable kernel threads go to the refrigerator. - * - * On success, returns 0. On failure, -errno and only the kernel threads are - * thawed, so as to give a chance to the caller to do additional cleanups - * (if any) before thawing the userspace tasks. So, it is the responsibility - * of the caller to thaw the userspace tasks, when the time is right. - */ -int freeze_kernel_threads(void) -{ - int error; - - pr_info("Freezing remaining freezable tasks ... "); - - pm_nosig_freezing = true; - error = try_to_freeze_tasks(false); - if (!error) - pr_cont("done."); - - pr_cont("\n"); - BUG_ON(in_atomic()); - - if (error) - thaw_kernel_threads(); - return error; -} - void thaw_processes(void) { struct task_struct *g, *p; @@ -234,23 +207,3 @@ void thaw_processes(void) pr_cont("done.\n"); trace_suspend_resume(TPS("thaw_processes"), 0, false); } - -void thaw_kernel_threads(void) -{ - struct task_struct *g, *p; - - pm_nosig_freezing = false; - pr_info("Restarting kernel threads ... "); - - thaw_workqueues(); - - read_lock(&tasklist_lock); - for_each_process_thread(g, p) { - if (p->flags & (PF_KTHREAD | PF_WQ_WORKER)) - __thaw_task(p); - } - read_unlock(&tasklist_lock); - - schedule(); - pr_cont("done.\n"); -} diff --git a/kernel/power/user.c b/kernel/power/user.c index 22df9f7ff672..ebb2e6a8ddc8 100644 --- a/kernel/power/user.c +++ b/kernel/power/user.c @@ -277,15 +277,6 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd, swsusp_free(); memset(&data->handle, 0, sizeof(struct snapshot_handle)); data->ready = false; - /* - * It is necessary to thaw kernel threads here, because - * SNAPSHOT_CREATE_IMAGE may be invoked directly after - * SNAPSHOT_FREE. In that case, if kernel threads were not - * thawed, the preallocation of memory carried out by - * hibernation_snapshot() might run into problems (i.e. it - * might fail or even deadlock). - */ - thaw_kernel_threads(); break; case SNAPSHOT_PREF_IMAGE_SIZE: diff --git a/tools/power/pm-graph/analyze_suspend.py b/tools/power/pm-graph/analyze_suspend.py index 1b60fe203741..545a5e2eafbe 100755 --- a/tools/power/pm-graph/analyze_suspend.py +++ b/tools/power/pm-graph/analyze_suspend.py @@ -138,7 +138,6 @@ class SystemValues: 'pm_prepare_console': dict(), 'pm_notifier_call_chain': dict(), 'freeze_processes': dict(), - 'freeze_kernel_threads': dict(), 'pm_restrict_gfp_mask': dict(), 'acpi_suspend_begin': dict(), 'suspend_console': dict(), -- 2.14.0
next prev parent reply index Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-10-03 18:53 [RFC 0/5] fs: replace kthread freezing with filesystem freeze/thaw Luis R. Rodriguez 2017-10-03 18:53 ` [RFC 1/5] fs: add iterate_supers_reverse() Luis R. Rodriguez 2017-10-03 18:53 ` [RFC 2/5] fs: freeze on suspend and thaw on resume Luis R. Rodriguez 2017-10-03 20:02 ` Bart Van Assche 2017-10-03 20:23 ` Luis R. Rodriguez 2017-10-03 20:32 ` Bart Van Assche 2017-10-03 20:39 ` Luis R. Rodriguez 2017-10-03 20:06 ` Jiri Kosina 2017-10-03 20:58 ` Dave Chinner 2017-10-03 21:16 ` Luis R. Rodriguez 2017-10-03 18:53 ` [RFC 3/5] xfs: allow fs freeze on suspend/hibernation Luis R. Rodriguez 2017-10-03 18:53 ` [RFC 4/5] ext4: add fs freezing support " Luis R. Rodriguez 2017-10-03 19:59 ` Theodore Ts'o 2017-10-03 20:13 ` Luis R. Rodriguez 2017-10-04 1:42 ` Theodore Ts'o 2017-10-04 7:05 ` Dave Chinner 2017-10-04 15:25 ` Bart Van Assche 2017-10-04 16:48 ` Theodore Ts'o 2017-10-04 22:22 ` Dave Chinner 2017-10-03 18:53 ` Luis R. Rodriguez [this message] 2017-10-03 18:59 ` [RFC 5/5] pm: remove kernel thread freezing Rafael J. Wysocki 2017-10-03 21:15 ` Rafael J. Wysocki 2017-10-04 0:47 ` Luis R. Rodriguez 2017-10-04 1:03 ` Bart Van Assche 2017-11-29 23:05 ` Luis R. Rodriguez 2017-10-04 7:18 ` Dave Chinner 2017-10-03 20:12 ` Pavel Machek 2017-10-03 20:15 ` Jiri Kosina 2017-10-03 20:21 ` Pavel Machek 2017-10-03 20:38 ` Jiri Kosina 2017-10-03 20:41 ` Rafael J. Wysocki 2017-10-03 20:57 ` Pavel Machek 2017-10-03 21:00 ` Jiri Kosina 2017-10-03 21:09 ` Shuah Khan 2017-10-03 21:18 ` Luis R. Rodriguez 2017-10-03 20:49 ` Luis R. Rodriguez 2017-10-06 12:07 ` Pavel Machek 2017-10-06 12:54 ` Theodore Ts'o 2017-10-03 20:13 ` Bart Van Assche 2017-10-03 20:17 ` Jiri Kosina 2017-10-03 20:21 ` Bart Van Assche 2017-10-03 20:24 ` Jiri Kosina 2017-10-03 20:27 ` Luis R. Rodriguez 2017-10-03 20:51 ` Jiri Kosina 2017-10-03 21:04 ` Dave Chinner 2017-10-03 21:07 ` Luis R. Rodriguez 2017-10-04 6:07 ` Hannes Reinecke 2017-10-03 19:33 ` [RFC 0/5] fs: replace kthread freezing with filesystem freeze/thaw Ming Lei 2017-10-03 20:05 ` Luis R. Rodriguez 2017-10-03 20:47 ` Matthew Wilcox 2017-10-03 20:54 ` Luis R. Rodriguez 2017-10-03 20:59 ` Bart Van Assche 2017-10-04 15:43 ` Ming Lei
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20171003185313.1017-6-mcgrof@kernel.org \ --to=mcgrof@kernel.org \ --cc=ONeukum@suse.com \ --cc=bart.vanassche@wdc.com \ --cc=boris.ostrovsky@oracle.com \ --cc=darrick.wong@oracle.com \ --cc=jack@suse.cz \ --cc=jgross@suse.com \ --cc=jikos@kernel.org \ --cc=len.brown@intel.com \ --cc=linux-block@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pm@vger.kernel.org \ --cc=linux-xfs@vger.kernel.org \ --cc=martin.petersen@oracle.com \ --cc=ming.lei@redhat.com \ --cc=nborisov@suse.com \ --cc=oleg.b.antonyan@gmail.com \ --cc=oleksandr@natalenko.name \ --cc=pavel@ucw.cz \ --cc=rjw@rjwysocki.net \ --cc=todd.e.brandt@linux.intel.com \ --cc=tytso@mit.edu \ --cc=viro@zeniv.linux.org.uk \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Linux-Block Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-block/0 linux-block/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-block linux-block/ https://lore.kernel.org/linux-block \ linux-block@vger.kernel.org public-inbox-index linux-block Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-block AGPL code for this site: git clone https://public-inbox.org/public-inbox.git