Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[PATCH] lockdep fix incorrect percpu usage

0 views
Skip to first unread message

Mathieu Desnoyers

unread,
Mar 29, 2010, 11:40:02 PM3/29/10
to
Should use per_cpu_ptr() to obfuscate the per cpu pointers (RELOC_HIDE is needed
for per cpu pointers).

git blame points to commit:

lockdep.c: commit 8e18257d29238311e82085152741f0c3aa18b74d

But it's really just moving the code around. But it's enough to say that the
problems appeared before Jul 19 01:48:54 2007, which brings us back to 2.6.23.

So it should be applied to stable 2.6.23.x to 2.6.33.x (or whichever of these
stable branches are still maintained) and to mainline 2.6.34-rc2.

This patch should be queued for the stable branch.
(tested on 2.6.33.1 x86_64)

Signed-off-by: Mathieu Desnoyers <mathieu....@efficios.com>
CC: Randy Dunlap <randy....@oracle.com>
CC: Eric Dumazet <da...@cosmosbay.com>
CC: Rusty Russell <ru...@rustcorp.com.au>
CC: Peter Zijlstra <a.p.zi...@chello.nl>
CC: Tejun Heo <t...@kernel.org>
CC: Ingo Molnar <mi...@elte.hu>
CC: Andrew Morton <ak...@linux-foundation.org>
CC: Linus Torvalds <torv...@linux-foundation.org>
CC: Greg Kroah-Hartman <gre...@suse.de>
CC: Steven Rostedt <ros...@goodmis.org>
CC: stable <sta...@kernel.org>
---
kernel/lockdep.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

Index: linux-2.6-lttng/kernel/lockdep.c
===================================================================
--- linux-2.6-lttng.orig/kernel/lockdep.c 2010-03-29 23:54:31.000000000 -0400
+++ linux-2.6-lttng/kernel/lockdep.c 2010-03-29 23:54:38.000000000 -0400
@@ -609,9 +609,9 @@ static int static_obj(void *obj)
* percpu var?
*/
for_each_possible_cpu(i) {
- start = (unsigned long) &__per_cpu_start + per_cpu_offset(i);
- end = (unsigned long) &__per_cpu_start + PERCPU_ENOUGH_ROOM
- + per_cpu_offset(i);
+ start = (unsigned long) per_cpu_ptr(&__per_cpu_start, i);
+ end = (unsigned long) per_cpu_ptr(&__per_cpu_start
+ + PERCPU_ENOUGH_ROOM, i);

if ((addr >= start) && (addr < end))
return 1;

--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majo...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

Peter Zijlstra

unread,
Mar 30, 2010, 4:50:01 AM3/30/10
to
On Mon, 2010-03-29 at 23:34 -0400, Mathieu Desnoyers wrote:
> Should use per_cpu_ptr() to obfuscate the per cpu pointers (RELOC_HIDE is needed
> for per cpu pointers).
>
> git blame points to commit:
>
> lockdep.c: commit 8e18257d29238311e82085152741f0c3aa18b74d
>
> But it's really just moving the code around. But it's enough to say that the
> problems appeared before Jul 19 01:48:54 2007, which brings us back to 2.6.23.
>
> So it should be applied to stable 2.6.23.x to 2.6.33.x (or whichever of these
> stable branches are still maintained) and to mainline 2.6.34-rc2.

well, definately not to mainline, since that code is utterly busted in
mainline due to recent per-cpu changes.

Mathieu Desnoyers

unread,
Mar 30, 2010, 9:50:02 AM3/30/10
to
* Peter Zijlstra (pet...@infradead.org) wrote:
> On Mon, 2010-03-29 at 23:34 -0400, Mathieu Desnoyers wrote:
> > Should use per_cpu_ptr() to obfuscate the per cpu pointers (RELOC_HIDE is needed
> > for per cpu pointers).
> >
> > git blame points to commit:
> >
> > lockdep.c: commit 8e18257d29238311e82085152741f0c3aa18b74d
> >
> > But it's really just moving the code around. But it's enough to say that the
> > problems appeared before Jul 19 01:48:54 2007, which brings us back to 2.6.23.
> >
> > So it should be applied to stable 2.6.23.x to 2.6.33.x (or whichever of these
> > stable branches are still maintained) and to mainline 2.6.34-rc2.
>
> well, definately not to mainline, since that code is utterly busted in
> mainline due to recent per-cpu changes.

How recent ? I'm based on

commit f57d4e859a8acd63f878cd0534ec4b990b1710dc
Merge: 0528faa... eed6351...
Author: Ingo Molnar <mi...@elte.hu>
Date: Mon Mar 29 18:56:00 2010 +0200

from -tip and I see the problem there, both in module.c and lockdep.c.

Thanks,

Mathieu


--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com

Peter Zijlstra

unread,
Mar 30, 2010, 10:30:01 AM3/30/10
to
On Tue, 2010-03-30 at 09:45 -0400, Mathieu Desnoyers wrote:
> * Peter Zijlstra (pet...@infradead.org) wrote:
> > On Mon, 2010-03-29 at 23:34 -0400, Mathieu Desnoyers wrote:
> > > Should use per_cpu_ptr() to obfuscate the per cpu pointers (RELOC_HIDE is needed
> > > for per cpu pointers).
> > >
> > > git blame points to commit:
> > >
> > > lockdep.c: commit 8e18257d29238311e82085152741f0c3aa18b74d
> > >
> > > But it's really just moving the code around. But it's enough to say that the
> > > problems appeared before Jul 19 01:48:54 2007, which brings us back to 2.6.23.
> > >
> > > So it should be applied to stable 2.6.23.x to 2.6.33.x (or whichever of these
> > > stable branches are still maintained) and to mainline 2.6.34-rc2.
> >
> > well, definately not to mainline, since that code is utterly busted in
> > mainline due to recent per-cpu changes.
>
> How recent ? I'm based on
>
> commit f57d4e859a8acd63f878cd0534ec4b990b1710dc
> Merge: 0528faa... eed6351...
> Author: Ingo Molnar <mi...@elte.hu>
> Date: Mon Mar 29 18:56:00 2010 +0200
>
> from -tip and I see the problem there, both in module.c and lockdep.c.

Yeah, its basically been busted since the early merge window period,
hopefully Tejun's patches will make it in soon:

http://lkml.org/lkml/2010/3/10/79

Mathieu Desnoyers

unread,
Mar 30, 2010, 11:10:01 AM3/30/10
to
* Peter Zijlstra (pet...@infradead.org) wrote:
> On Tue, 2010-03-30 at 09:45 -0400, Mathieu Desnoyers wrote:
> > * Peter Zijlstra (pet...@infradead.org) wrote:
> > > On Mon, 2010-03-29 at 23:34 -0400, Mathieu Desnoyers wrote:
> > > > Should use per_cpu_ptr() to obfuscate the per cpu pointers (RELOC_HIDE is needed
> > > > for per cpu pointers).
> > > >
> > > > git blame points to commit:
> > > >
> > > > lockdep.c: commit 8e18257d29238311e82085152741f0c3aa18b74d
> > > >
> > > > But it's really just moving the code around. But it's enough to say that the
> > > > problems appeared before Jul 19 01:48:54 2007, which brings us back to 2.6.23.
> > > >
> > > > So it should be applied to stable 2.6.23.x to 2.6.33.x (or whichever of these
> > > > stable branches are still maintained) and to mainline 2.6.34-rc2.
> > >
> > > well, definately not to mainline, since that code is utterly busted in
> > > mainline due to recent per-cpu changes.
> >
> > How recent ? I'm based on
> >
> > commit f57d4e859a8acd63f878cd0534ec4b990b1710dc
> > Merge: 0528faa... eed6351...
> > Author: Ingo Molnar <mi...@elte.hu>
> > Date: Mon Mar 29 18:56:00 2010 +0200
> >
> > from -tip and I see the problem there, both in module.c and lockdep.c.
>
> Yeah, its basically been busted since the early merge window period,
> hopefully Tejun's patches will make it in soon:
>
> http://lkml.org/lkml/2010/3/10/79

I see. These patches are "on their way" to mainline, so it's better not to
create conflicts. So the lockdep patch should only be applied to -stable, but
separate module.c patch should apply to both -stable and mainline. Am I
correct ?

Thanks,

Mathieu


>
>
>

--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com

Tejun Heo

unread,
Mar 30, 2010, 10:50:01 PM3/30/10
to
On 03/31/2010 12:05 AM, Mathieu Desnoyers wrote:
> I see. These patches are "on their way" to mainline, so it's better not to
> create conflicts. So the lockdep patch should only be applied to -stable, but
> separate module.c patch should apply to both -stable and mainline. Am I
> correct ?

I'll push proper fixes to mainline in a few days. For -stable, yeah,
probably.

Thanks.

--
tejun

Greg KH

unread,
Apr 19, 2010, 2:40:03 PM4/19/10
to
On Wed, Mar 31, 2010 at 11:43:16AM +0900, Tejun Heo wrote:
> On 03/31/2010 12:05 AM, Mathieu Desnoyers wrote:
> > I see. These patches are "on their way" to mainline, so it's better not to
> > create conflicts. So the lockdep patch should only be applied to -stable, but
> > separate module.c patch should apply to both -stable and mainline. Am I
> > correct ?
>
> I'll push proper fixes to mainline in a few days. For -stable, yeah,
> probably.

Ok, did a patch ever end up in Linus's tree for this that I can pull
into the -stable releases?

thanks,

greg k-h

Mathieu Desnoyers

unread,
Apr 20, 2010, 10:40:02 AM4/20/10
to
* Greg KH (gr...@kroah.com) wrote:
> On Wed, Mar 31, 2010 at 11:43:16AM +0900, Tejun Heo wrote:
> > On 03/31/2010 12:05 AM, Mathieu Desnoyers wrote:
> > > I see. These patches are "on their way" to mainline, so it's better not to
> > > create conflicts. So the lockdep patch should only be applied to -stable, but
> > > separate module.c patch should apply to both -stable and mainline. Am I
> > > correct ?
> >
> > I'll push proper fixes to mainline in a few days. For -stable, yeah,
> > probably.
>
> Ok, did a patch ever end up in Linus's tree for this that I can pull
> into the -stable releases?
>
> thanks,
>
> greg k-h

Hi Greg,

Here is the updated patch, stating which mainline commit from Tejun fixes it by
refactoring the code. I'll leave the decision to pick this targeted fix or Tejun
refactoring into -stable up to you.


lockdep fix incorrect percpu usage

Should use per_cpu_ptr() to obfuscate the per cpu pointers (RELOC_HIDE is needed
for per cpu pointers).

git blame points to commit:

lockdep.c: commit 8e18257d29238311e82085152741f0c3aa18b74d

But it's really just moving the code around. But it's enough to say that the
problems appeared before Jul 19 01:48:54 2007, which brings us back to 2.6.23.

It should be applied to stable 2.6.23.x to 2.6.33.x (or whichever of these
stable branches are still maintained).

The mainline kernel as of 2.6.34-rc5 is not affected by this problem because
commit 10fad5e46f6c7bdfb01b1a012380a38e3c6ab346 fixed it by refactoring.

(tested on 2.6.33.1 x86_64)

Signed-off-by: Mathieu Desnoyers <mathieu....@efficios.com>
CC: Randy Dunlap <randy....@oracle.com>
CC: Eric Dumazet <da...@cosmosbay.com>
CC: Rusty Russell <ru...@rustcorp.com.au>
CC: Peter Zijlstra <a.p.zi...@chello.nl>
CC: Tejun Heo <t...@kernel.org>
CC: Ingo Molnar <mi...@elte.hu>
CC: Andrew Morton <ak...@linux-foundation.org>
CC: Linus Torvalds <torv...@linux-foundation.org>
CC: Greg Kroah-Hartman <gre...@suse.de>
CC: Steven Rostedt <ros...@goodmis.org>
CC: stable <sta...@kernel.org>
---
kernel/lockdep.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

Index: linux.trees.git/kernel/lockdep.c
===================================================================
--- linux.trees.git.orig/kernel/lockdep.c 2010-03-19 16:18:34.000000000 -0400
+++ linux.trees.git/kernel/lockdep.c 2010-03-30 09:48:43.000000000 -0400
@@ -600,9 +600,9 @@ static int static_obj(void *obj)


* percpu var?
*/
for_each_possible_cpu(i) {
- start = (unsigned long) &__per_cpu_start + per_cpu_offset(i);
- end = (unsigned long) &__per_cpu_start + PERCPU_ENOUGH_ROOM
- + per_cpu_offset(i);
+ start = (unsigned long) per_cpu_ptr(&__per_cpu_start, i);
+ end = (unsigned long) per_cpu_ptr(&__per_cpu_start
+ + PERCPU_ENOUGH_ROOM, i);

if ((addr >= start) && (addr < end))
return 1;

--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com

Tejun Heo

unread,
Apr 22, 2010, 4:40:02 AM4/22/10
to
On 04/20/2010 04:33 PM, Mathieu Desnoyers wrote:
> Here is the updated patch, stating which mainline commit from Tejun
> fixes it by refactoring the code. I'll leave the decision to pick
> this targeted fix or Tejun refactoring into -stable up to you.

Ditto, please take this one.

Thanks.

--
tejun

0 new messages