From: Yuyang Du <duyuyang@gmail.com>
To: peterz@infradead.org, will.deacon@arm.com, mingo@kernel.org
Cc: bvanassche@acm.org, ming.lei@redhat.com,
linux-kernel@vger.kernel.org, Yuyang Du <duyuyang@gmail.com>
Subject: [PATCH v2 18/19] locking/lockdep: Update comments on dependency search
Date: Mon, 18 Mar 2019 16:57:32 +0800 [thread overview]
Message-ID: <20190318085733.3143-19-duyuyang@gmail.com> (raw)
In-Reply-To: <20190318085733.3143-1-duyuyang@gmail.com>
The breadth-first search is implemented as flat-out non-recursive now, but
the comments are still describing it as recursive, update the comments in
that regard.
Signed-off-by: Yuyang Du <duyuyang@gmail.com>
---
kernel/locking/lockdep.c | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index 90d58cc..1d38bf6 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -1384,6 +1384,10 @@ static inline struct list_head *get_backward_dep(struct lock_list * lock)
return &lock->class->locks_before;
}
+/*
+ * Forward- or backward-dependency search, used for both circular dependency
+ * checking and hardirq-unsafe/softirq-unsafe checking.
+ */
static int __bfs(struct lock_list *source_entry,
void *data,
int (*match)(struct lock_list *entry, void *data),
@@ -1461,12 +1465,6 @@ static inline int __bfs_backwards(struct lock_list *src_entry, void *data,
}
/*
- * Recursive, forwards-direction lock-dependency checking, used for
- * both noncyclic checking and for hardirq-unsafe/softirq-unsafe
- * checking.
- */
-
-/*
* Print a dependency chain entry (this is only done when a deadlock
* has been detected):
*/
@@ -2166,7 +2164,7 @@ static void print_deadlock_scenario(struct held_lock *nxt,
/*
* There was a chain-cache miss, and we are about to add a new dependency
- * to a previous lock. We recursively validate the following rules:
+ * to a previous lock. We validate the following rules:
*
* - would the adding of the <prev> -> <next> dependency create a
* circular dependency in the graph? [== circular deadlock]
@@ -2216,11 +2214,12 @@ static void print_deadlock_scenario(struct held_lock *nxt,
/*
* Prove that the new <prev> -> <next> dependency would not
* create a circular dependency in the graph. (We do this by
- * forward-recursing into the graph starting at <next>, and
- * checking whether we can reach <prev>.)
+ * a breadth-first search into the graph starting at <next>,
+ * which checks whether we can reach <prev>.)
*
- * We are using global variables to control the recursion, to
- * keep the stackframe size of the recursive functions low:
+ * The search is limited by the size of the circular queue (i.e.,
+ * MAX_CIRCULAR_QUEUE_SIZE) which keeps track of a breadth of nodes
+ * in the graph whose neighbours are to be checked.
*/
this.class = hlock_class(next);
this.parent = NULL;
--
1.8.3.1
next prev parent reply other threads:[~2019-03-18 8:58 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-18 8:57 [PATCH v2 00/19] locking/lockdep: Add comments and make some code Yuyang Du
2019-03-18 8:57 ` [PATCH v2 01/19] locking/lockdep: Change all print_*() return type to void Yuyang Du
2019-03-18 9:45 ` Joe Perches
2019-03-19 3:28 ` Yuyang Du
2019-03-19 16:30 ` Bart Van Assche
2019-03-18 8:57 ` [PATCH v2 02/19] locking/lockdep: Add description and explanation in lockdep design doc Yuyang Du
2019-03-18 8:57 ` [PATCH v2 03/19] locking/lockdep: Adjust lock usage bit character checks Yuyang Du
2019-03-18 8:57 ` [PATCH v2 04/19] locking/lockdep: Remove useless conditional macro Yuyang Du
2019-03-18 8:57 ` [PATCH v2 05/19] locking/lockdep: Adjust indents for function definitions Yuyang Du
2019-03-19 16:33 ` Bart Van Assche
2019-03-19 16:36 ` Peter Zijlstra
2019-03-18 8:57 ` [PATCH v2 06/19] locking/lockdep: Print the right depth for chain key colission Yuyang Du
2019-03-18 8:57 ` [PATCH v2 07/19] locking/lockdep: Update obsolete struct field description Yuyang Du
2019-03-19 16:35 ` Bart Van Assche
2019-03-19 16:44 ` Peter Zijlstra
2019-03-18 8:57 ` [PATCH v2 08/19] locking/lockdep: Use lockdep_init_task for task initiation consistently Yuyang Du
2019-03-18 8:57 ` [PATCH v2 09/19] locking/lockdep: Define INITIAL_CHAIN_KEY for chain keys to start with Yuyang Du
2019-03-18 8:57 ` [PATCH v2 10/19] locking/lockdep: Change the range of class_idx in held_lock struct Yuyang Du
2019-03-18 8:57 ` [PATCH v2 11/19] locking/lockdep: Remove unused argument in validate_chain() Yuyang Du
2019-03-19 16:45 ` Bart Van Assche
2019-03-18 8:57 ` [PATCH v2 12/19] locking/lockdep: Update comment Yuyang Du
2019-03-18 8:57 ` [PATCH v2 13/19] locking/lockdep: Remove unnecessary function pointer argument Yuyang Du
2019-03-19 16:48 ` Bart Van Assche
2019-03-18 8:57 ` [PATCH v2 14/19] locking/lockdep: Change type of the element field in circular_queue Yuyang Du
2019-03-19 16:50 ` Bart Van Assche
2019-03-19 16:51 ` Bart Van Assche
2019-03-18 8:57 ` [PATCH v2 15/19] locking/lockdep: Remove __cq_empty() Yuyang Du
2019-03-19 16:54 ` Bart Van Assche
2019-03-20 2:30 ` Yuyang Du
2019-03-18 8:57 ` [PATCH v2 16/19] locking/lockdep: Use function pointer to avoid constant checks Yuyang Du
2019-03-19 16:56 ` Bart Van Assche
2019-03-18 8:57 ` [PATCH v2 17/19] locking/lockdep: Combine check_noncircular and check_redundant Yuyang Du
2019-03-18 8:57 ` Yuyang Du [this message]
2019-03-18 8:57 ` [PATCH v2 19/19] locking/lockdep: Change if to else-if when checking bfs errors Yuyang Du
2019-03-19 16:29 ` Bart Van Assche
2019-03-19 17:19 ` Joe Perches
2019-03-20 2:02 ` 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=20190318085733.3143-19-duyuyang@gmail.com \
--to=duyuyang@gmail.com \
--cc=bvanassche@acm.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ming.lei@redhat.com \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=will.deacon@arm.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.