Merge branch 'for-4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
Pull workqueue update from Tejun Heo: "Workqueue changes for v4.5. One cleanup patch and three to improve the debuggability. Workqueue now has a stall detector which dumps workqueue state if any worker pool hasn't made forward progress over a certain amount of time (30s by default) and also triggers a warning if a workqueue which can be used in memory reclaim path tries to wait on something which can't be. These should make workqueue hangs a lot easier to debug." * 'for-4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: workqueue: simplify the apply_workqueue_attrs_locked() workqueue: implement lockup detector watchdog: introduce touch_softlockup_watchdog_sched() workqueue: warn if memory reclaim tries to flush !WQ_MEM_RECLAIM workqueue
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
#include <linux/smpboot.h>
|
||||
#include <linux/sched/rt.h>
|
||||
#include <linux/tick.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
#include <asm/irq_regs.h>
|
||||
#include <linux/kvm_para.h>
|
||||
@@ -225,7 +226,15 @@ static void __touch_watchdog(void)
|
||||
__this_cpu_write(watchdog_touch_ts, get_timestamp());
|
||||
}
|
||||
|
||||
void touch_softlockup_watchdog(void)
|
||||
/**
|
||||
* touch_softlockup_watchdog_sched - touch watchdog on scheduler stalls
|
||||
*
|
||||
* Call when the scheduler may have stalled for legitimate reasons
|
||||
* preventing the watchdog task from executing - e.g. the scheduler
|
||||
* entering idle state. This should only be used for scheduler events.
|
||||
* Use touch_softlockup_watchdog() for everything else.
|
||||
*/
|
||||
void touch_softlockup_watchdog_sched(void)
|
||||
{
|
||||
/*
|
||||
* Preemption can be enabled. It doesn't matter which CPU's timestamp
|
||||
@@ -233,6 +242,12 @@ void touch_softlockup_watchdog(void)
|
||||
*/
|
||||
raw_cpu_write(watchdog_touch_ts, 0);
|
||||
}
|
||||
|
||||
void touch_softlockup_watchdog(void)
|
||||
{
|
||||
touch_softlockup_watchdog_sched();
|
||||
wq_watchdog_touch(raw_smp_processor_id());
|
||||
}
|
||||
EXPORT_SYMBOL(touch_softlockup_watchdog);
|
||||
|
||||
void touch_all_softlockup_watchdogs(void)
|
||||
@@ -246,6 +261,7 @@ void touch_all_softlockup_watchdogs(void)
|
||||
*/
|
||||
for_each_watchdog_cpu(cpu)
|
||||
per_cpu(watchdog_touch_ts, cpu) = 0;
|
||||
wq_watchdog_touch(-1);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HARDLOCKUP_DETECTOR
|
||||
|
Reference in New Issue
Block a user