From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: Andrew Morton <akpm@osdl.org>, Linus Torvalds <torvalds@osdl.org>,
Dave Vasilevsky <djvasi@gmail.com>, Pavel Machek <pavel@ucw.cz>,
Nigel Cunningham <nigel@suspend2.net>,
Alexey Starikovskiy <alexey.y.starikovskiy@linux.intel.com>,
linux-pm <linux-pm@lists.osdl.org>
Subject: Re: SMP suspend broken due to "swsusp: Change code ordering in disk.c" et al.
Date: Sat, 24 Feb 2007 01:01:11 +0100 [thread overview]
Message-ID: <200702240101.12846.rjw@sisk.pl> (raw)
In-Reply-To: <1172262219.3870.63.camel@johannes.berg>
Hi,
On Friday, 23 February 2007 21:23, Johannes Berg wrote:
> Hi,
>
> > In that case the fastest fix would be to revert the commit in question (and
> > some others too),
>
> Yeah, the same thing exists for uswsusp and regular suspend-to-ram
> afaict.
Exactly.
> > but I don't think it will be satisfactory for the people with
> > the ACPI issues related to the resume code ordering. Moreover, it really
> > is more reasonable to disable nonboot CPUs after tasks have been frozen
> > (I think it's also necessary for the CPU hotplugging with the help of the
> > freezer; see below).
> >
> > I'll try to find a better solution later today.
>
> Great.
I'm looking at it right now, but this is quite complicated.
Could you please try the appended patch? It's somewhat hackish, but may work.
The idea is to do nothing on CPU unplug if the CPU's worker thread is frozen
and later check in the thread itself if it has been replaced by another one.
Greetings,
Rafael
kernel/workqueue.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
Index: linux-2.6.20-mm2/kernel/workqueue.c
===================================================================
--- linux-2.6.20-mm2.orig/kernel/workqueue.c 2007-02-23 22:48:50.000000000 +0100
+++ linux-2.6.20-mm2/kernel/workqueue.c 2007-02-24 00:58:57.000000000 +0100
@@ -316,7 +316,13 @@ static int worker_thread(void *__cwq)
do_sigaction(SIGCHLD, &sa, (struct k_sigaction *)0);
for (;;) {
- try_to_freeze();
+ if (try_to_freeze()) {
+ /* We've just exited the refrigerator. If our CPU is
+ * a nonboot one, we might have been replaced.
+ */
+ if (cwq->thread != current)
+ break;
+ }
prepare_to_wait(&cwq->more_work, &wait, TASK_INTERRUPTIBLE);
if (!cwq->should_stop && list_empty(&cwq->worklist))
@@ -713,7 +719,7 @@ static void cleanup_workqueue_thread(str
int alive = 0;
spin_lock_irq(&cwq->lock);
- if (cwq->thread != NULL) {
+ if (cwq->thread != NULL && !frozen(cwq->thread)) {
insert_wq_barrier(cwq, &barr, 1);
cwq->should_stop = 1;
alive = 1;
next prev parent reply other threads:[~2007-02-24 0:01 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-02-23 3:29 SMP suspend broken due to "swsusp: Change code ordering in disk.c" et al Johannes Berg
2007-02-23 11:54 ` Rafael J. Wysocki
2007-02-23 12:17 ` Johannes Berg
2007-02-23 13:25 ` Rafael J. Wysocki
2007-02-23 20:23 ` Johannes Berg
2007-02-24 0:01 ` Rafael J. Wysocki [this message]
2007-02-24 0:31 ` Johannes Berg
2007-02-24 8:57 ` Rafael J. Wysocki
2007-02-24 20:54 ` Rafael J. Wysocki
2007-02-24 21:07 ` Johannes Berg
2007-03-12 16:57 ` Roman Jarosz
2007-03-12 18:14 ` Rafael J. Wysocki
2007-02-23 13:31 ` Johannes Berg
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=200702240101.12846.rjw@sisk.pl \
--to=rjw@sisk.pl \
--cc=akpm@osdl.org \
--cc=alexey.y.starikovskiy@linux.intel.com \
--cc=djvasi@gmail.com \
--cc=johannes@sipsolutions.net \
--cc=linux-pm@lists.osdl.org \
--cc=nigel@suspend2.net \
--cc=pavel@ucw.cz \
--cc=torvalds@osdl.org \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox