From: Srivatsa Vaddagiri <vatsa@in.ibm.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Gautham R Shenoy <ego@in.ibm.com>,
"Rafael J. Wysocki" <rjw@sisk.pl>, Pavel Machek <pavel@ucw.cz>,
Oleg Nesterov <oleg@tv-sign.ru>,
Andrew Morton <akpm@linux-foundation.org>,
LKML <linux-kernel@vger.kernel.org>,
Dipankar Sarma <dipankar@in.ibm.com>, Ingo Molnar <mingo@elte.hu>,
Paul E McKenney <paulmck@us.ibm.com>
Subject: Re: [RFD] Freezing of kernel threads
Date: Mon, 14 May 2007 11:48:46 +0530 [thread overview]
Message-ID: <20070514061846.GA30625@in.ibm.com> (raw)
In-Reply-To: <alpine.LFD.0.98.0705130925290.6739@woody.linux-foundation.org>
On Sun, May 13, 2007 at 09:33:41AM -0700, Linus Torvalds wrote:
> On Sun, 13 May 2007, Gautham R Shenoy wrote:
> > RFC #1: Use get_hot_cpus()- put_hot_cpus() , which follow the
> > well known refcounting model.
>
> Yes. And usign the "preempt count" as a refcount is fairly natural, no?
> We do already depend on that in many code-paths.
>
> It also has the advantage since it's not a *blocking* lock, [...]
get/put_hot_cpus() was intended to be similar and not same as
get/put_cpu().
One difference is get_hot_cpus() has to be a blocking lock. It has to block
when there is a cpu_down/up operation already in progress, otherwise it isn't
of much help to serialize readers/writers. Note that a cpu_down/up is marked in
progress *before* the first notifier is sent (CPU_DOWN/UP_PREPARE) and not just
when changing the cpu_online_map bitmap.
Because it can be a blocking call, there needs to be associated
machinery to wake up sleeping readers/writers.
The other complication get/put_hotcpu() had was dealing with
write-followed-by-read lock attempt by the *same* thread (whilst doing
cpu_down/up). IIRC this was triggered by some callback processing in CPU_DEAD
or CPU_DOWN_PREPARE.
cpu_down()
|- take write lock
|- CPU_DOWN_PREPARE
| |- foo() wants a read_lock
Stupid as it sounds, it was really found to be happening! Gautham, do you
recall who that foo() was? Somebody in cpufreq I guess ..
Tackling that requires some state bit in task_struct to educate
read_lock to be a no-op if write lock is already held by the thread.
In summary, get/put_hot_cpu() will need to be (slightly) more complex than
something like get/put_cpu(). Perhaps this complexity was what put off
Andrew when he suggested the use of freezer (http://lkml.org/lkml/2006/11/1/400)
> For example, since all users of cpu_online_map should be pure *readers*
> (apart from a couple of cases that actually bring up a CPU), you can do
> things like
>
> #define cpu_online_map check_cpu_online_map()
>
> static inline cpumask_t check_cpu_online_map(void)
> {
> WARN_ON(!preempt_safe()); /* or whatever lock we decide on */
> return __real_cpu_online_map;
> }
I remember Rusty had a similar function to check for unsafe references
to cpu_online_map way back when cpu hotplug was being developed. It will
be a good idea to reintroduce that back.
> and it will nicely catch things like that.
--
Regards,
vatsa
next prev parent reply other threads:[~2007-05-14 6:11 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-12 18:17 [RFD] Freezing of kernel threads Rafael J. Wysocki
2007-05-12 18:25 ` Linus Torvalds
2007-05-12 21:14 ` Rafael J. Wysocki
2007-05-12 19:17 ` Pavel Machek
2007-05-12 19:40 ` Linus Torvalds
2007-05-12 22:14 ` Pavel Machek
2007-05-12 22:08 ` Rafael J. Wysocki
2007-05-12 19:36 ` Gautham R Shenoy
2007-05-12 19:57 ` Linus Torvalds
2007-05-12 20:11 ` Linus Torvalds
2007-05-13 8:33 ` Gautham R Shenoy
2007-05-13 16:33 ` Linus Torvalds
2007-05-13 20:08 ` Rafael J. Wysocki
2007-05-13 20:49 ` Linus Torvalds
2007-05-13 21:14 ` Rafael J. Wysocki
2007-05-14 6:18 ` Srivatsa Vaddagiri [this message]
2007-05-14 7:26 ` Gautham R Shenoy
2007-05-14 10:07 ` Rafael J. Wysocki
2007-05-14 7:41 ` Dipankar Sarma
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=20070514061846.GA30625@in.ibm.com \
--to=vatsa@in.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=dipankar@in.ibm.com \
--cc=ego@in.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=oleg@tv-sign.ru \
--cc=paulmck@us.ibm.com \
--cc=pavel@ucw.cz \
--cc=rjw@sisk.pl \
--cc=torvalds@linux-foundation.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.