workqueue: Change workqueue lockdep map to pointer
Will help enable user-defined lockdep maps for workqueues. Cc: Tejun Heo <tj@kernel.org> Cc: Lai Jiangshan <jiangshanlai@gmail.com> Signed-off-by: Matthew Brost <matthew.brost@intel.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
b188c57af2
commit
4f022f430e
@ -364,7 +364,8 @@ struct workqueue_struct {
|
||||
#ifdef CONFIG_LOCKDEP
|
||||
char *lock_name;
|
||||
struct lock_class_key key;
|
||||
struct lockdep_map lockdep_map;
|
||||
struct lockdep_map __lockdep_map;
|
||||
struct lockdep_map *lockdep_map;
|
||||
#endif
|
||||
char name[WQ_NAME_LEN]; /* I: workqueue name */
|
||||
|
||||
@ -3203,7 +3204,7 @@ __acquires(&pool->lock)
|
||||
lockdep_start_depth = lockdep_depth(current);
|
||||
/* see drain_dead_softirq_workfn() */
|
||||
if (!bh_draining)
|
||||
lock_map_acquire(&pwq->wq->lockdep_map);
|
||||
lock_map_acquire(pwq->wq->lockdep_map);
|
||||
lock_map_acquire(&lockdep_map);
|
||||
/*
|
||||
* Strictly speaking we should mark the invariant state without holding
|
||||
@ -3237,7 +3238,7 @@ __acquires(&pool->lock)
|
||||
pwq->stats[PWQ_STAT_COMPLETED]++;
|
||||
lock_map_release(&lockdep_map);
|
||||
if (!bh_draining)
|
||||
lock_map_release(&pwq->wq->lockdep_map);
|
||||
lock_map_release(pwq->wq->lockdep_map);
|
||||
|
||||
if (unlikely((worker->task && in_atomic()) ||
|
||||
lockdep_depth(current) != lockdep_start_depth ||
|
||||
@ -3873,8 +3874,8 @@ static void touch_wq_lockdep_map(struct workqueue_struct *wq)
|
||||
if (wq->flags & WQ_BH)
|
||||
local_bh_disable();
|
||||
|
||||
lock_map_acquire(&wq->lockdep_map);
|
||||
lock_map_release(&wq->lockdep_map);
|
||||
lock_map_acquire(wq->lockdep_map);
|
||||
lock_map_release(wq->lockdep_map);
|
||||
|
||||
if (wq->flags & WQ_BH)
|
||||
local_bh_enable();
|
||||
@ -3908,7 +3909,7 @@ void __flush_workqueue(struct workqueue_struct *wq)
|
||||
struct wq_flusher this_flusher = {
|
||||
.list = LIST_HEAD_INIT(this_flusher.list),
|
||||
.flush_color = -1,
|
||||
.done = COMPLETION_INITIALIZER_ONSTACK_MAP(this_flusher.done, wq->lockdep_map),
|
||||
.done = COMPLETION_INITIALIZER_ONSTACK_MAP(this_flusher.done, (*wq->lockdep_map)),
|
||||
};
|
||||
int next_color;
|
||||
|
||||
@ -4768,7 +4769,8 @@ static void wq_init_lockdep(struct workqueue_struct *wq)
|
||||
lock_name = wq->name;
|
||||
|
||||
wq->lock_name = lock_name;
|
||||
lockdep_init_map(&wq->lockdep_map, lock_name, &wq->key, 0);
|
||||
wq->lockdep_map = &wq->__lockdep_map;
|
||||
lockdep_init_map(wq->lockdep_map, lock_name, &wq->key, 0);
|
||||
}
|
||||
|
||||
static void wq_unregister_lockdep(struct workqueue_struct *wq)
|
||||
|
Loading…
Reference in New Issue
Block a user