Commit 1c21f14e authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar

lockdep: fix incorrect state name

In the recent mark_lock_irq() rework a bug snuck in that would report the
state of write locks causing irq inversion under a read lock as a read
lock.

Fix this by masking the read bit of the state when validating write
dependencies.
Reported-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <1236172646.5330.7450.camel@laptop>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 6700ec65
...@@ -2015,7 +2015,8 @@ typedef int (*check_usage_f)(struct task_struct *, struct held_lock *, ...@@ -2015,7 +2015,8 @@ typedef int (*check_usage_f)(struct task_struct *, struct held_lock *,
enum lock_usage_bit bit, const char *name); enum lock_usage_bit bit, const char *name);
static int static int
mark_lock_irq(struct task_struct *curr, struct held_lock *this, int new_bit) mark_lock_irq(struct task_struct *curr, struct held_lock *this,
enum lock_usage_bit new_bit)
{ {
int excl_bit = exclusive_bit(new_bit); int excl_bit = exclusive_bit(new_bit);
int read = new_bit & 1; int read = new_bit & 1;
...@@ -2043,7 +2044,7 @@ mark_lock_irq(struct task_struct *curr, struct held_lock *this, int new_bit) ...@@ -2043,7 +2044,7 @@ mark_lock_irq(struct task_struct *curr, struct held_lock *this, int new_bit)
* states. * states.
*/ */
if ((!read || !dir || STRICT_READ_CHECKS) && if ((!read || !dir || STRICT_READ_CHECKS) &&
!usage(curr, this, excl_bit, state_name(new_bit))) !usage(curr, this, excl_bit, state_name(new_bit & ~1)))
return 0; return 0;
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment