History

workqueue: Change workqueue lockdep map to pointer

Will help enable user-defined lockdep maps for workqueues.

Matthew Brost committed 2 years ago

Commit 4f022f41 parent b188c571 file · +9 −7Browse files

Showing the changes to kernel/workqueue.c (1 of 1 file). Show all

Unified · Split

kernel/workqueue.c+9−7
@@ -364,7 +364,8 @@ struct workqueue_struct { · 363 unmodified lines
364364 #ifdef CONFIG_LOCKDEP
365365 char *lock_name;
366366 struct lock_class_key key;
367− struct lockdep_map lockdep_map;
367+ struct lockdep_map __lockdep_map;
368+ struct lockdep_map *lockdep_map;
368369 #endif
369370 char name[WQ_NAME_LEN]; /* I: workqueue name */
370371
@@ -3203,7 +3204,7 @@ __acquires(&pool->lock) · 2832 unmodified lines
32033204 lockdep_start_depth = lockdep_depth(current);
32043205 /* see drain_dead_softirq_workfn() */
32053206 if (!bh_draining)
3206− lock_map_acquire(&pwq->wq->lockdep_map);
3207+ lock_map_acquire(pwq->wq->lockdep_map);
32073208 lock_map_acquire(&lockdep_map);
32083209 /*
32093210 * Strictly speaking we should mark the invariant state without holding
@@ -3237,7 +3238,7 @@ __acquires(&pool->lock) · 27 unmodified lines
32373238 pwq->stats[PWQ_STAT_COMPLETED]++;
32383239 lock_map_release(&lockdep_map);
32393240 if (!bh_draining)
3240− lock_map_release(&pwq->wq->lockdep_map);
3241+ lock_map_release(pwq->wq->lockdep_map);
32413242
32423243 if (unlikely((worker->task && in_atomic()) ||
32433244 lockdep_depth(current) != lockdep_start_depth ||
@@ -3873,8 +3874,8 @@ static void touch_wq_lockdep_map(struct workqueue_struct *wq) · 629 unmodified lines
38733874 if (wq->flags & WQ_BH)
38743875 local_bh_disable();
38753876
3876− lock_map_acquire(&wq->lockdep_map);
3877− lock_map_release(&wq->lockdep_map);
3877+ lock_map_acquire(wq->lockdep_map);
3878+ lock_map_release(wq->lockdep_map);
38783879
38793880 if (wq->flags & WQ_BH)
38803881 local_bh_enable();
@@ -3908,7 +3909,7 @@ void __flush_workqueue(struct workqueue_struct *wq) · 27 unmodified lines
39083909 struct wq_flusher this_flusher = {
39093910 .list = LIST_HEAD_INIT(this_flusher.list),
39103911 .flush_color = -1,
3911− .done = COMPLETION_INITIALIZER_ONSTACK_MAP(this_flusher.done, wq->lockdep_map),
3912+ .done = COMPLETION_INITIALIZER_ONSTACK_MAP(this_flusher.done, (*wq->lockdep_map)),
39123913 };
39133914 int next_color;
39143915
@@ -4768,7 +4769,8 @@ static void wq_init_lockdep(struct workqueue_struct *wq) · 853 unmodified lines
47684769 lock_name = wq->name;
47694770
47704771 wq->lock_name = lock_name;
4771− lockdep_init_map(&wq->lockdep_map, lock_name, &wq->key, 0);
4772+ wq->lockdep_map = &wq->__lockdep_map;
4773+ lockdep_init_map(wq->lockdep_map, lock_name, &wq->key, 0);
47724774 }
47734775
47744776 static void wq_unregister_lockdep(struct workqueue_struct *wq)