diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2011-01-17 07:45:37 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2011-01-18 09:10:35 -0500 |
commit | c5ed5145591774bd9a2960ba4ca45a02fc70aad1 (patch) | |
tree | f7e53164a33e1a0a41a4b3a7b508835361e39689 /mm/migrate.c | |
parent | ad7f4e3f7b966ac09c8f98dbc5024813a1685775 (diff) |
perf: Fix contexted inheritance
Linus reported that the RCU lockdep annotation bits triggered for this
rcu_dereference() because we're not holding rcu_read_lock().
Going over the code I cannot convince myself its correct:
- holding a ref on the parent_ctx, doesn't avoid it being uncloned
concurrently (as the comment says), so we can race with a free.
- holding parent_ctx->mutex doesn't avoid the above free from taking
place either, it would at best avoid parent_ctx from being freed.
I.e. the warning is correct. To fix the bug, serialize against the
unclone_ctx() call by extending the reach of the parent_ctx->lock.
Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'mm/migrate.c')
0 files changed, 0 insertions, 0 deletions