History

Merge branch 'for-5.13-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq

Pull workqueue fix from Tejun Heo: "One commit to fix spurious workqueue stall warnings across VM suspensions" * 'for-5.13-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: wq: handle VM suspension in stall detection

Linus Torvalds committed 5 years ago

Commit 5df7ae72 parents f71d49e 940d71c1 file · +10 −2Browse files

Unified · Split

kernel/workqueue.c+10−2
@@ -50,6 +50,7 @@ · 49 unmodified lines
50#include <linux/uaccess.h>50#include <linux/uaccess.h>
51#include <linux/sched/isolation.h>51#include <linux/sched/isolation.h>
52#include <linux/nmi.h>52#include <linux/nmi.h>
53#include <linux/kvm_para.h>
53 54
54#include "workqueue_internal.h"55#include "workqueue_internal.h"
55 56
@@ -5772,6 +5773,7 @@ static void wq_watchdog_timer_fn(struct timer_list *unused) · 5716 unmodified lines
5772{5773{
5773 unsigned long thresh = READ_ONCE(wq_watchdog_thresh) * HZ;5774 unsigned long thresh = READ_ONCE(wq_watchdog_thresh) * HZ;
5774 bool lockup_detected = false;5775 bool lockup_detected = false;
5776 unsigned long now = jiffies;
5775 struct worker_pool *pool;5777 struct worker_pool *pool;
5776 int pi;5778 int pi;
5777 5779
@@ -5786,6 +5788,12 @@ static void wq_watchdog_timer_fn(struct timer_list *unused) · 8 unmodified lines
5786 if (list_empty(&pool->worklist))5788 if (list_empty(&pool->worklist))
5787 continue;5789 continue;
5788 5790
5791 /*
5792 * If a virtual machine is stopped by the host it can look to
5793 * the watchdog like a stall.
5794 */
5795 kvm_check_and_clear_guest_paused();
5796
5789 /* get the latest of pool and touched timestamps */5797 /* get the latest of pool and touched timestamps */
5790 if (pool->cpu >= 0)5798 if (pool->cpu >= 0)
5791 touched = READ_ONCE(per_cpu(wq_watchdog_touched_cpu, pool->cpu));5799 touched = READ_ONCE(per_cpu(wq_watchdog_touched_cpu, pool->cpu));
@@ -5799,12 +5807,12 @@ static void wq_watchdog_timer_fn(struct timer_list *unused) · 7 unmodified lines
5799 ts = touched;5807 ts = touched;
5800 5808
5801 /* did we stall? */5809 /* did we stall? */
5802 if (time_after(jiffies, ts + thresh)) {5810 if (time_after(now, ts + thresh)) {
5803 lockup_detected = true;5811 lockup_detected = true;
5804 pr_emerg("BUG: workqueue lockup - pool");5812 pr_emerg("BUG: workqueue lockup - pool");
5805 pr_cont_pool_info(pool);5813 pr_cont_pool_info(pool);
5806 pr_cont(" stuck for %us!\n",5814 pr_cont(" stuck for %us!\n",
5807 jiffies_to_msecs(jiffies - pool_ts) / 1000);5815 jiffies_to_msecs(now - pool_ts) / 1000);
5808 }5816 }
5809 }5817 }
5810 5818

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t