From: tip-bot for Yuyang Du <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: hpa@zytor.com, duyuyang@gmail.com, mingo@kernel.org,
torvalds@linux-foundation.org, tglx@linutronix.de,
peterz@infradead.org, linux-kernel@vger.kernel.org
Subject: [tip:locking/core] locking/lockdep: Adjust lock usage bit character checks
Date: Mon, 3 Jun 2019 06:07:50 -0700 [thread overview]
Message-ID: <tip-c52478f4f38ace598475413a08dba9b9fd827eaf@git.kernel.org> (raw)
In-Reply-To: <20190506081939.74287-4-duyuyang@gmail.com>
Commit-ID: c52478f4f38ace598475413a08dba9b9fd827eaf
Gitweb: https://git.kernel.org/tip/c52478f4f38ace598475413a08dba9b9fd827eaf
Author: Yuyang Du <duyuyang@gmail.com>
AuthorDate: Mon, 6 May 2019 16:19:19 +0800
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Mon, 3 Jun 2019 11:55:35 +0200
locking/lockdep: Adjust lock usage bit character checks
The lock usage bit characters are defined and determined with tricks.
Add some explanation to make it a bit clearer, then adjust the logic to
check the usage, which optimizes the code a bit.
No functional change.
Signed-off-by: Yuyang Du <duyuyang@gmail.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: bvanassche@acm.org
Cc: frederic@kernel.org
Cc: ming.lei@redhat.com
Cc: will.deacon@arm.com
Link: https://lkml.kernel.org/r/20190506081939.74287-4-duyuyang@gmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
kernel/locking/lockdep.c | 21 ++++++++++++++++-----
1 file 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)
static char get_usage_char(struct lock_class *class, enum lock_usage_bit bit)
{
+ /*
+ * The usage character defaults to '.' (i.e., irqs disabled and not in
+ * irq context), which is the safest usage category.
+ */
char c = '.';
- if (class->usage_mask & lock_flag(bit + LOCK_USAGE_DIR_MASK))
+ /*
+ * The order of the following usage checks matters, which will
+ * result in the outcome character as follows:
+ *
+ * - '+': irq is enabled and not in irq context
+ * - '-': in irq context and irq is disabled
+ * - '?': in irq context and irq is enabled
+ */
+ if (class->usage_mask & lock_flag(bit + LOCK_USAGE_DIR_MASK)) {
c = '+';
- if (class->usage_mask & lock_flag(bit)) {
- c = '-';
- if (class->usage_mask & lock_flag(bit + LOCK_USAGE_DIR_MASK))
+ if (class->usage_mask & lock_flag(bit))
c = '?';
- }
+ } else if (class->usage_mask & lock_flag(bit))
+ c = '-';
return c;
}
next prev parent reply other threads:[~2019-06-03 13:08 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-06 8:19 [PATCH v2 00/23] locking/lockdep: Small improvements Yuyang Du
2019-05-06 8:19 ` [PATCH v2 01/23] locking/lockdep: Change all print_*() return type to void Yuyang Du
2019-06-03 13:06 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 02/23] locking/lockdep: Add description and explanation in lockdep design doc Yuyang Du
2019-06-03 13:07 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 03/23] locking/lockdep: Adjust lock usage bit character checks Yuyang Du
2019-06-03 13:07 ` tip-bot for Yuyang Du [this message]
2019-05-06 8:19 ` [PATCH v2 04/23] locking/lockdep: Remove useless conditional macro Yuyang Du
2019-06-03 13:08 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 05/23] locking/lockdep: Print the right depth for chain key colission Yuyang Du
2019-06-03 13:09 ` [tip:locking/core] locking/lockdep: Print the right depth for chain key collision tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 06/23] locking/lockdep: Update obsolete struct field description Yuyang Du
2019-06-03 13:09 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 07/23] locking/lockdep: Use lockdep_init_task for task initiation consistently Yuyang Du
2019-06-03 13:10 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 08/23] locking/lockdep: Define INITIAL_CHAIN_KEY for chain keys to start with Yuyang Du
2019-06-03 13:11 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 09/23] locking/lockdep: Change the range of class_idx in held_lock struct Yuyang Du
2019-06-03 13:12 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 10/23] locking/lockdep: Remove unused argument in validate_chain() and check_deadlock() Yuyang Du
2019-06-03 13:12 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 11/23] locking/lockdep: Update comment Yuyang Du
2019-06-03 13:13 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 12/23] locking/lockdep: Change type of the element field in circular_queue Yuyang Du
2019-06-03 13:14 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 13/23] locking/lockdep: Change the return type of __cq_dequeue() Yuyang Du
2019-06-03 13:15 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 14/23] locking/lockdep: Avoid constant checks in __bfs by using offset reference Yuyang Du
2019-06-03 13:15 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 15/23] locking/lockdep: Update comments on dependency search Yuyang Du
2019-06-03 13:16 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 16/23] locking/lockdep: Add explanation to lock usage rules in lockdep design doc Yuyang Du
2019-06-03 13:17 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 17/23] locking/lockdep: Remove redundant argument in check_deadlock Yuyang Du
2019-06-03 13:18 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 18/23] locking/lockdep: Remove unused argument in __lock_release Yuyang Du
2019-06-03 13:18 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 19/23] locking/lockdep: Refactorize check_noncircular and check_redundant Yuyang Du
2019-06-03 13:19 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 20/23] locking/lockdep: Check redundant dependency only when CONFIG_LOCKDEP_SMALL Yuyang Du
2019-06-03 13:20 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 21/23] locking/lockdep: Consolidate lock usage bit initialization Yuyang Du
2019-06-03 13:20 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 22/23] locking/lockdep: Adjust new bit cases in mark_lock Yuyang Du
2019-06-03 13:21 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-06 8:19 ` [PATCH v2 23/23] locking/lockdep: Remove !dir in lock irq usage check Yuyang Du
2019-06-03 13:22 ` [tip:locking/core] " tip-bot for Yuyang Du
2019-05-08 8:55 ` [PATCH v2 00/23] locking/lockdep: Small improvements Peter Zijlstra
2019-05-09 0:50 ` Yuyang Du
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-c52478f4f38ace598475413a08dba9b9fd827eaf@git.kernel.org \
--to=tipbot@zytor.com \
--cc=duyuyang@gmail.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox