From: Dipankar Sarma <dipankar@in.ibm.com>
To: Andrew Morton <akpm@osdl.org>
Cc: Linus Torvalds <torvalds@osdl.org>, Dave Jones <davej@redhat.com>,
ego@in.ibm.com, rusty@rustcorp.com.au,
linux-kernel@vger.kernel.org, arjan@intel.linux.com,
mingo@elte.hu, vatsa@in.ibm.com, ashok.raj@intel.com
Subject: Re: [RFC][PATCH 0/4] Redesign cpu_hotplug locking.
Date: Sun, 27 Aug 2006 12:41:16 +0530 [thread overview]
Message-ID: <20060827071116.GD22565@in.ibm.com> (raw)
In-Reply-To: <20060826234618.b9b2535a.akpm@osdl.org>
On Sat, Aug 26, 2006 at 11:46:18PM -0700, Andrew Morton wrote:
> On Sun, 27 Aug 2006 11:41:55 +0530
> Dipankar Sarma <dipankar@in.ibm.com> wrote:
>
> > Now coming to the read-side of lock_cpu_hotplug() - cpu hotplug
> > is a very special asynchronous event. You cannot protect against
> > it using your own subsystem lock because you don't control
> > access to cpu_online_map.
>
> Yes you do. Please, read _cpu_up(), _cpu_down() and the example in
> workqueue_cpu_callback(). It's really very simple.
What are you talking about here ? That is the write side. You are
*not* supposed to do lock_cpu_hotplug() in cpu callbacks paths AFAICT.
If someone does it (like cpufreq did), it is just *wrong*.
> > With multiple low-level subsystems
> > needing it, it also becomes difficult to work out the lock
> > hierarchies.
>
> That'll matter if we do crappy code. Let's not do that?
I am talking about readsides here - you read cpu_online_map and
block then reuse the map and make some calls to another subsystem
that may again do a similar read-side cpu_hotplug lock. I suspect
that it hard to get rid of all possible dependencies.
> > > I rather doubt that anyone will be hitting the races in practice. I'd
> > > recommend simply removing all the lock_cpu_hotplug() calls for 2.6.18.
> >
> > I don't think that is a good idea.
>
> The code's already racy and I don't think anyone has reported a
> cpufreq-vs-hotplug race.
Do cpu hotplugs in a one cpu and change frequencies in another -
I think Gautham has a script to reproduce this. Besides
lockdep apparently complains about it -
http://marc.theaimsgroup.com/?l=linux-kernel&m=115359728428432&w=2
> > The right thing to do would be to
> > do an audit and clean up the bad lock_cpu_hotplug() calls.
>
> No, that won't fix it. For example, take a look at all the *callers* of
> cpufreq_update_policy(). AFAICT they're all buggy. Fiddling with the
> existing lock_cpu_hotplug() sites won't fix that. (Possibly this
> particular problem can be fixed by checking that the relevant CPU is still
> online after the appropriate locking has been taken - dunno).
>
> It needs to be ripped out and some understanding, thought and design should
> be applied to the problem.
Really, the hotplug locking rules are fairly simple-
1. If you are in cpu hotplug callback path, don't take any lock.
2. If you are in a non-hotplug path reading cpu_online_map and you don't
block, you just disable preemption and you are safe from hotplug.
3. If you are in a non-hotplug path and you use cpu_online_map and
you *really* need to block, you use lock_cpu_hotplug() or
cpu_hotplug_disable whatever it is called.
Is this too difficult for people to follow ?
>
> > People
> > seem to have just got lazy with lock_cpu_hotplug().
>
> That's because lock_cpu_hotplug() purports to be some magical thing which
> makes all your troubles go away.
No it doesn't. Perhaps we should just document the rules better
and put some static checks for people to get it right.
Thanks
Dipankar
next prev parent reply other threads:[~2006-08-27 7:11 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-24 10:26 [RFC][PATCH 0/4] Redesign cpu_hotplug locking Gautham R Shenoy
2006-08-24 10:34 ` Ingo Molnar
2006-08-24 11:27 ` Gautham R Shenoy
2006-08-24 11:24 ` Ingo Molnar
2006-08-24 16:17 ` Andrew Morton
2006-08-25 9:50 ` Dave Jones
2006-08-26 21:09 ` Linus Torvalds
2006-08-26 22:04 ` Andrew Morton
2006-08-27 6:11 ` Dipankar Sarma
2006-08-27 6:46 ` Andrew Morton
2006-08-27 7:11 ` Dipankar Sarma [this message]
2006-08-27 7:42 ` Andrew Morton
2006-08-27 8:57 ` Nick Piggin
2006-08-27 11:06 ` Dipankar Sarma
2006-08-27 17:21 ` Andrew Morton
2006-08-27 17:49 ` Dipankar Sarma
2006-08-27 18:01 ` Andrew Morton
2006-08-27 7:37 ` Dipankar Sarma
2006-08-27 7:57 ` Andrew Morton
2006-08-26 22:05 ` Ingo Molnar
2006-08-26 22:25 ` Andrew Morton
2006-08-28 2:37 ` Srivatsa Vaddagiri
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=20060827071116.GD22565@in.ibm.com \
--to=dipankar@in.ibm.com \
--cc=akpm@osdl.org \
--cc=arjan@intel.linux.com \
--cc=ashok.raj@intel.com \
--cc=davej@redhat.com \
--cc=ego@in.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rusty@rustcorp.com.au \
--cc=torvalds@osdl.org \
--cc=vatsa@in.ibm.com \
/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.