|
@@ -5390,11 +5390,8 @@ static void workqueue_sysfs_unregister(struct workqueue_struct *wq) { }
|
|
|
*/
|
|
|
#ifdef CONFIG_WQ_WATCHDOG
|
|
|
|
|
|
-static void wq_watchdog_timer_fn(unsigned long data);
|
|
|
-
|
|
|
static unsigned long wq_watchdog_thresh = 30;
|
|
|
-static struct timer_list wq_watchdog_timer =
|
|
|
- TIMER_DEFERRED_INITIALIZER(wq_watchdog_timer_fn, 0, 0);
|
|
|
+static struct timer_list wq_watchdog_timer;
|
|
|
|
|
|
static unsigned long wq_watchdog_touched = INITIAL_JIFFIES;
|
|
|
static DEFINE_PER_CPU(unsigned long, wq_watchdog_touched_cpu) = INITIAL_JIFFIES;
|
|
@@ -5408,7 +5405,7 @@ static void wq_watchdog_reset_touched(void)
|
|
|
per_cpu(wq_watchdog_touched_cpu, cpu) = jiffies;
|
|
|
}
|
|
|
|
|
|
-static void wq_watchdog_timer_fn(unsigned long data)
|
|
|
+static void wq_watchdog_timer_fn(struct timer_list *unused)
|
|
|
{
|
|
|
unsigned long thresh = READ_ONCE(wq_watchdog_thresh) * HZ;
|
|
|
bool lockup_detected = false;
|
|
@@ -5510,6 +5507,7 @@ module_param_cb(watchdog_thresh, &wq_watchdog_thresh_ops, &wq_watchdog_thresh,
|
|
|
|
|
|
static void wq_watchdog_init(void)
|
|
|
{
|
|
|
+ timer_setup(&wq_watchdog_timer, wq_watchdog_timer_fn, TIMER_DEFERRABLE);
|
|
|
wq_watchdog_set_thresh(wq_watchdog_thresh);
|
|
|
}
|
|
|
|