@@ -364,7 +364,8 @@ struct workqueue_struct {
364
364
#ifdef CONFIG_LOCKDEP
365
365
char * lock_name ;
366
366
struct lock_class_key key ;
367
- struct lockdep_map lockdep_map ;
367
+ struct lockdep_map __lockdep_map ;
368
+ struct lockdep_map * lockdep_map ;
368
369
#endif
369
370
char name [WQ_NAME_LEN ]; /* I: workqueue name */
370
371
@@ -3203,7 +3204,7 @@ __acquires(&pool->lock)
3203
3204
lockdep_start_depth = lockdep_depth (current );
3204
3205
/* see drain_dead_softirq_workfn() */
3205
3206
if (!bh_draining )
3206
- lock_map_acquire (& pwq -> wq -> lockdep_map );
3207
+ lock_map_acquire (pwq -> wq -> lockdep_map );
3207
3208
lock_map_acquire (& lockdep_map );
3208
3209
/*
3209
3210
* Strictly speaking we should mark the invariant state without holding
@@ -3237,7 +3238,7 @@ __acquires(&pool->lock)
3237
3238
pwq -> stats [PWQ_STAT_COMPLETED ]++ ;
3238
3239
lock_map_release (& lockdep_map );
3239
3240
if (!bh_draining )
3240
- lock_map_release (& pwq -> wq -> lockdep_map );
3241
+ lock_map_release (pwq -> wq -> lockdep_map );
3241
3242
3242
3243
if (unlikely ((worker -> task && in_atomic ()) ||
3243
3244
lockdep_depth (current ) != lockdep_start_depth ||
@@ -3873,8 +3874,8 @@ static void touch_wq_lockdep_map(struct workqueue_struct *wq)
3873
3874
if (wq -> flags & WQ_BH )
3874
3875
local_bh_disable ();
3875
3876
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 );
3878
3879
3879
3880
if (wq -> flags & WQ_BH )
3880
3881
local_bh_enable ();
@@ -3908,7 +3909,7 @@ void __flush_workqueue(struct workqueue_struct *wq)
3908
3909
struct wq_flusher this_flusher = {
3909
3910
.list = LIST_HEAD_INIT (this_flusher .list ),
3910
3911
.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 ) ),
3912
3913
};
3913
3914
int next_color ;
3914
3915
@@ -4768,7 +4769,8 @@ static void wq_init_lockdep(struct workqueue_struct *wq)
4768
4769
lock_name = wq -> name ;
4769
4770
4770
4771
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 );
4772
4774
}
4773
4775
4774
4776
static void wq_unregister_lockdep (struct workqueue_struct * wq )
0 commit comments