diff options
Diffstat (limited to 'kernel/workqueue.c')
| -rw-r--r-- | kernel/workqueue.c | 19 | 
1 files changed, 7 insertions, 12 deletions
diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 0d150da252e8..79f2319543ce 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -1412,7 +1412,6 @@ static void __queue_work(int cpu, struct workqueue_struct *wq,  	 */  	lockdep_assert_irqs_disabled(); -	debug_work_activate(work);  	/* if draining, only works from the same workqueue are allowed */  	if (unlikely(wq->flags & __WQ_DRAINING) && @@ -1494,6 +1493,7 @@ retry:  		worklist = &pwq->delayed_works;  	} +	debug_work_activate(work);  	insert_work(pwq, work, worklist, work_flags);  out: @@ -5787,22 +5787,17 @@ static void wq_watchdog_timer_fn(struct timer_list *unused)  			continue;  		/* get the latest of pool and touched timestamps */ +		if (pool->cpu >= 0) +			touched = READ_ONCE(per_cpu(wq_watchdog_touched_cpu, pool->cpu)); +		else +			touched = READ_ONCE(wq_watchdog_touched);  		pool_ts = READ_ONCE(pool->watchdog_ts); -		touched = READ_ONCE(wq_watchdog_touched);  		if (time_after(pool_ts, touched))  			ts = pool_ts;  		else  			ts = touched; -		if (pool->cpu >= 0) { -			unsigned long cpu_touched = -				READ_ONCE(per_cpu(wq_watchdog_touched_cpu, -						  pool->cpu)); -			if (time_after(cpu_touched, ts)) -				ts = cpu_touched; -		} -  		/* did we stall? */  		if (time_after(jiffies, ts + thresh)) {  			lockup_detected = true; @@ -5826,8 +5821,8 @@ notrace void wq_watchdog_touch(int cpu)  {  	if (cpu >= 0)  		per_cpu(wq_watchdog_touched_cpu, cpu) = jiffies; -	else -		wq_watchdog_touched = jiffies; + +	wq_watchdog_touched = jiffies;  }  static void wq_watchdog_set_thresh(unsigned long thresh)  | 
