Messages in this thread Patch in this message | | | From | Yuyang Du <> | Subject | [PATCH v2 16/19] locking/lockdep: Use function pointer to avoid constant checks | Date | Mon, 18 Mar 2019 16:57:30 +0800 |
| |
In search of a dependency in the lock graph, there is contant check for forward or backward search. Use a function pointer to avoid that check.
No functional change.
Signed-off-by: Yuyang Du <duyuyang@gmail.com> --- kernel/locking/lockdep.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-)
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c index ee8fe64..3dbb4d0 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c @@ -1374,11 +1374,21 @@ static inline int get_lock_depth(struct lock_list *child) return depth; } +static inline struct list_head *get_forward_dep(struct lock_list * lock) +{ + return &lock->class->locks_after; +} + +static inline struct list_head *get_backward_dep(struct lock_list * lock) +{ + return &lock->class->locks_before; +} + static int __bfs(struct lock_list *source_entry, void *data, int (*match)(struct lock_list *entry, void *data), struct lock_list **target_entry, - int forward) + struct list_head *(*get_dep)(struct lock_list * lock)) { struct lock_list *entry; struct lock_list *lock; @@ -1392,11 +1402,7 @@ static int __bfs(struct lock_list *source_entry, goto exit; } - if (forward) - head = &source_entry->class->locks_after; - else - head = &source_entry->class->locks_before; - + head = get_dep(source_entry); if (list_empty(head)) goto exit; @@ -1410,10 +1416,7 @@ static int __bfs(struct lock_list *source_entry, goto exit; } - if (forward) - head = &lock->class->locks_after; - else - head = &lock->class->locks_before; + head = get_dep(lock); DEBUG_LOCKS_WARN_ON(!irqs_disabled()); @@ -1445,7 +1448,7 @@ static inline int __bfs_forwards(struct lock_list *src_entry, void *data, int (*match)(struct lock_list *entry, void *data), struct lock_list **target_entry) { - return __bfs(src_entry, data, match, target_entry, 1); + return __bfs(src_entry, data, match, target_entry, get_forward_dep); } @@ -1453,7 +1456,7 @@ static inline int __bfs_backwards(struct lock_list *src_entry, void *data, int (*match)(struct lock_list *entry, void *data), struct lock_list **target_entry) { - return __bfs(src_entry, data, match, target_entry, 0); + return __bfs(src_entry, data, match, target_entry, get_backward_dep); } -- 1.8.3.1
| |