Commit c1661325 authored by Yuyang Du's avatar Yuyang Du Committed by Ingo Molnar

locking/lockdep: Change the return type of __cq_dequeue()

With the change, we can slightly adjust the code to iterate the queue in BFS
search, which simplifies the code. No functional change.
Signed-off-by: default avatarYuyang Du <duyuyang@gmail.com>
Signed-off-by: default avatarPeter 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-14-duyuyang@gmail.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent aa480771
...@@ -1308,14 +1308,21 @@ static inline int __cq_enqueue(struct circular_queue *cq, struct lock_list *elem ...@@ -1308,14 +1308,21 @@ static inline int __cq_enqueue(struct circular_queue *cq, struct lock_list *elem
return 0; return 0;
} }
static inline int __cq_dequeue(struct circular_queue *cq, struct lock_list **elem) /*
* Dequeue an element from the circular_queue, return a lock_list if
* the queue is not empty, or NULL if otherwise.
*/
static inline struct lock_list * __cq_dequeue(struct circular_queue *cq)
{ {
struct lock_list * lock;
if (__cq_empty(cq)) if (__cq_empty(cq))
return -1; return NULL;
*elem = cq->element[cq->front]; lock = cq->element[cq->front];
cq->front = (cq->front + 1) & CQ_MASK; cq->front = (cq->front + 1) & CQ_MASK;
return 0;
return lock;
} }
static inline unsigned int __cq_get_elem_count(struct circular_queue *cq) static inline unsigned int __cq_get_elem_count(struct circular_queue *cq)
...@@ -1367,6 +1374,7 @@ static int __bfs(struct lock_list *source_entry, ...@@ -1367,6 +1374,7 @@ static int __bfs(struct lock_list *source_entry,
int forward) int forward)
{ {
struct lock_list *entry; struct lock_list *entry;
struct lock_list *lock;
struct list_head *head; struct list_head *head;
struct circular_queue *cq = &lock_cq; struct circular_queue *cq = &lock_cq;
int ret = 1; int ret = 1;
...@@ -1388,10 +1396,7 @@ static int __bfs(struct lock_list *source_entry, ...@@ -1388,10 +1396,7 @@ static int __bfs(struct lock_list *source_entry,
__cq_init(cq); __cq_init(cq);
__cq_enqueue(cq, source_entry); __cq_enqueue(cq, source_entry);
while (!__cq_empty(cq)) { while ((lock = __cq_dequeue(cq))) {
struct lock_list *lock;
__cq_dequeue(cq, &lock);
if (!lock->class) { if (!lock->class) {
ret = -2; ret = -2;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment