lkml.org 
[lkml]   [2019]   [Aug]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 01/30] locking/lockdep: Rename deadlock check functions
    Date
    In lockdep, deadlock checkings are carried out at two places:

    - In current task's held lock stack, check lock recursion deadlock scenarios.
    - In dependency graph, check lock inversion deadlock scenarios.

    Rename these two relevant functions for later use. Plus, with recursive-read
    locks, only a dependency circle in lock graph is not sufficient condition
    for lock inversion deadlocks anymore, so check_noncircular() is not entirely
    accurate.

    No functional change.

    Signed-off-by: Yuyang Du <duyuyang@gmail.com>
    ---
    kernel/locking/lockdep.c | 15 ++++++++-------
    1 file changed, 8 insertions(+), 7 deletions(-)

    diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
    index 3c3902c..3c89a50 100644
    --- a/kernel/locking/lockdep.c
    +++ b/kernel/locking/lockdep.c
    @@ -1782,8 +1782,8 @@ unsigned long lockdep_count_backward_deps(struct lock_class *class)
    * Print an error and return 0 if it does.
    */
    static noinline int
    -check_noncircular(struct held_lock *src, struct held_lock *target,
    - struct lock_trace **const trace)
    +check_deadlock_graph(struct held_lock *src, struct held_lock *target,
    + struct lock_trace **const trace)
    {
    int ret;
    struct lock_list *uninitialized_var(target_entry);
    @@ -2372,7 +2372,8 @@ static inline void inc_chains(void)
    }

    /*
    - * Check whether we are holding such a class already.
    + * Check whether we are holding such a class already in the current
    + * held lock stack.
    *
    * (Note that this has to be done separately, because the graph cannot
    * detect such classes of deadlocks.)
    @@ -2380,7 +2381,7 @@ static inline void inc_chains(void)
    * Returns: 0 on deadlock detected, 1 on OK, 2 on recursive read
    */
    static int
    -check_deadlock(struct task_struct *curr, struct held_lock *next)
    +check_deadlock_current(struct task_struct *curr, struct held_lock *next)
    {
    struct held_lock *prev;
    struct held_lock *nest = NULL;
    @@ -2465,7 +2466,7 @@ static inline void inc_chains(void)

    /*
    * Prove that the new <prev> -> <next> dependency would not
    - * create a circular dependency in the graph. (We do this by
    + * create a deadlock scenario in the graph. (We do this by
    * a breadth-first search into the graph starting at <next>,
    * and check whether we can reach <prev>.)
    *
    @@ -2473,7 +2474,7 @@ static inline void inc_chains(void)
    * MAX_CIRCULAR_QUEUE_SIZE) which keeps track of a breadth of nodes
    * in the graph whose neighbours are to be checked.
    */
    - ret = check_noncircular(next, prev, trace);
    + ret = check_deadlock_graph(next, prev, trace);
    if (unlikely(ret <= 0))
    return 0;

    @@ -2952,7 +2953,7 @@ static int validate_chain(struct task_struct *curr,
    * The simple case: does the current hold the same lock
    * already?
    */
    - int ret = check_deadlock(curr, hlock);
    + int ret = check_deadlock_current(curr, hlock);

    if (!ret)
    return 0;
    --
    1.8.3.1
    \
     
     \ /
      Last update: 2019-08-29 10:33    [W:3.988 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site