| From mathieu.desnoyers@efficios.com Wed Apr 21 15:39:34 2010 |
| From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> |
| Date: Tue, 20 Apr 2010 10:33:50 -0400 |
| Subject: lockdep: fix incorrect percpu usage |
| To: Greg KH <greg@kroah.com> |
| Cc: Tejun Heo <tj@kernel.org>, Randy Dunlap <randy.dunlap@oracle.com>, Greg Kroah-Hartman <gregkh@suse.de>, Peter Zijlstra <peterz@infradead.org>, stable <stable@kernel.org>, Rusty Russell <rusty@rustcorp.com.au>, linux-kernel@vger.kernel.org, Steven Rostedt <rostedt@goodmis.org>, Eric Dumazet <dada1@cosmosbay.com>, Ingo Molnar <mingo@elte.hu>, Linus Torvalds <torvalds@linux-foundation.org>, Andrew Morton <akpm@linux-foundation.org> |
| Message-ID: <20100420143350.GA14622@Krystal> |
| Content-Disposition: inline |
| |
| From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> |
| |
| The mainline kernel as of 2.6.34-rc5 is not affected by this problem because |
| commit 10fad5e46f6c7bdfb01b1a012380a38e3c6ab346 fixed it by refactoring. |
| |
| 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). |
| |
| (tested on 2.6.33.1 x86_64) |
| |
| Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> |
| CC: Randy Dunlap <randy.dunlap@oracle.com> |
| CC: Eric Dumazet <dada1@cosmosbay.com> |
| CC: Rusty Russell <rusty@rustcorp.com.au> |
| CC: Peter Zijlstra <a.p.zijlstra@chello.nl> |
| CC: Tejun Heo <tj@kernel.org> |
| CC: Ingo Molnar <mingo@elte.hu> |
| CC: Andrew Morton <akpm@linux-foundation.org> |
| CC: Linus Torvalds <torvalds@linux-foundation.org> |
| CC: Greg Kroah-Hartman <gregkh@suse.de> |
| CC: Steven Rostedt <rostedt@goodmis.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| kernel/lockdep.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/kernel/lockdep.c |
| +++ b/kernel/lockdep.c |
| @@ -591,9 +591,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, i) |
| + + PERCPU_ENOUGH_ROOM; |
| |
| if ((addr >= start) && (addr < end)) |
| return 1; |