aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/locking/lockdep.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index 109b56267c8f..a033df00fd1d 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -500,15 +500,26 @@ static inline unsigned long lock_flag(enum lock_usage_bit bit)
500 500
501static char get_usage_char(struct lock_class *class, enum lock_usage_bit bit) 501static char get_usage_char(struct lock_class *class, enum lock_usage_bit bit)
502{ 502{
503 /*
504 * The usage character defaults to '.' (i.e., irqs disabled and not in
505 * irq context), which is the safest usage category.
506 */
503 char c = '.'; 507 char c = '.';
504 508
505 if (class->usage_mask & lock_flag(bit + LOCK_USAGE_DIR_MASK)) 509 /*
510 * The order of the following usage checks matters, which will
511 * result in the outcome character as follows:
512 *
513 * - '+': irq is enabled and not in irq context
514 * - '-': in irq context and irq is disabled
515 * - '?': in irq context and irq is enabled
516 */
517 if (class->usage_mask & lock_flag(bit + LOCK_USAGE_DIR_MASK)) {
506 c = '+'; 518 c = '+';
507 if (class->usage_mask & lock_flag(bit)) { 519 if (class->usage_mask & lock_flag(bit))
508 c = '-';
509 if (class->usage_mask & lock_flag(bit + LOCK_USAGE_DIR_MASK))
510 c = '?'; 520 c = '?';
511 } 521 } else if (class->usage_mask & lock_flag(bit))
522 c = '-';
512 523
513 return c; 524 return c;
514} 525}