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 <[email protected]>
---
 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

Reply via email to