[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1354831350.17101.31.camel@gandalf.local.home>
Date: Thu, 06 Dec 2012 17:02:30 -0500
From: Steven Rostedt <rostedt@...dmis.org>
To: "Srivatsa S. Bhat" <srivatsa.bhat@...ux.vnet.ibm.com>
Cc: Oleg Nesterov <oleg@...hat.com>, tj@...nel.org, tglx@...utronix.de,
peterz@...radead.org, paulmck@...ux.vnet.ibm.com,
rusty@...tcorp.com.au, mingo@...nel.org, akpm@...ux-foundation.org,
namhyung@...nel.org, vincent.guittot@...aro.org, sbw@....edu,
amit.kucheria@...aro.org, rjw@...k.pl, wangyun@...ux.vnet.ibm.com,
xiaoguangrong@...ux.vnet.ibm.com, nikunj@...ux.vnet.ibm.com,
linux-pm@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [RFC PATCH v2 01/10] CPU hotplug: Provide APIs for "light"
atomic readers to prevent CPU offline
On Fri, 2012-12-07 at 01:06 +0530, Srivatsa S. Bhat wrote:
> On 12/07/2012 12:58 AM, Steven Rostedt wrote:
> > On Fri, 2012-12-07 at 00:18 +0530, Srivatsa S. Bhat wrote:
> >> On 12/06/2012 09:48 PM, Oleg Nesterov wrote:
> >>> On 12/06, Srivatsa S. Bhat wrote:
> >>>>
> >>>> +void get_online_cpus_atomic(void)
> >>>> +{
> >>>> + int c, old;
> >>>> +
> >>>> + preempt_disable();
> >>>> + read_lock(&hotplug_rwlock);
> >>>
> >>> Confused... Why it also takes hotplug_rwlock?
> >>
> >> To avoid ABBA deadlocks.
> >>
> >> hotplug_rwlock was meant for the "light" readers.
> >> The atomic counters were meant for the "heavy/full" readers.
> >> I wanted them to be able to nest in any manner they wanted,
> >> such as:
> >>
> >> Full inside light:
> >>
> >> get_online_cpus_atomic_light()
> >> ...
> >> get_online_cpus_atomic_full()
> >> ...
> >> put_online_cpus_atomic_full()
> >> ...
> >> put_online_cpus_atomic_light()
> >>
> >> Or, light inside full:
> >>
> >> get_online_cpus_atomic_full()
> >> ...
> >> get_online_cpus_atomic_light()
> >> ...
> >> put_online_cpus_atomic_light()
> >> ...
> >> put_online_cpus_atomic_full()
> >>
> >>
> The root-cause of this deadlock is again lock-ordering mismatch right?
> CPU0 takes locks in order A, B
> CPU1 takes locks in order B, A
>
> And the writer facilitates in actually getting deadlocked.
>
> I avoid this in this patchset by always taking the locks in the same
> order. So we won't be deadlocking like this.
OK, I haven't looked closely at the patch yet. I'm currently hacking on
my own problems. But just from the description above, it looked like you
were using rw_locks() to be able to inverse the order of the locks.
-- Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists