|
@@ -1379,6 +1379,7 @@ static const struct file_operations proc_vmstat_file_operations = {
|
|
|
#endif /* CONFIG_PROC_FS */
|
|
|
|
|
|
#ifdef CONFIG_SMP
|
|
|
+static struct workqueue_struct *vmstat_wq;
|
|
|
static DEFINE_PER_CPU(struct delayed_work, vmstat_work);
|
|
|
int sysctl_stat_interval __read_mostly = HZ;
|
|
|
static cpumask_var_t cpu_stat_off;
|
|
@@ -1391,7 +1392,7 @@ static void vmstat_update(struct work_struct *w)
|
|
|
* to occur in the future. Keep on running the
|
|
|
* update worker thread.
|
|
|
*/
|
|
|
- schedule_delayed_work_on(smp_processor_id(),
|
|
|
+ queue_delayed_work_on(smp_processor_id(), vmstat_wq,
|
|
|
this_cpu_ptr(&vmstat_work),
|
|
|
round_jiffies_relative(sysctl_stat_interval));
|
|
|
} else {
|
|
@@ -1460,7 +1461,7 @@ static void vmstat_shepherd(struct work_struct *w)
|
|
|
if (need_update(cpu) &&
|
|
|
cpumask_test_and_clear_cpu(cpu, cpu_stat_off))
|
|
|
|
|
|
- schedule_delayed_work_on(cpu,
|
|
|
+ queue_delayed_work_on(cpu, vmstat_wq,
|
|
|
&per_cpu(vmstat_work, cpu), 0);
|
|
|
|
|
|
put_online_cpus();
|
|
@@ -1549,6 +1550,7 @@ static int __init setup_vmstat(void)
|
|
|
|
|
|
start_shepherd_timer();
|
|
|
cpu_notifier_register_done();
|
|
|
+ vmstat_wq = alloc_workqueue("vmstat", WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
|
|
|
#endif
|
|
|
#ifdef CONFIG_PROC_FS
|
|
|
proc_create("buddyinfo", S_IRUGO, NULL, &fragmentation_file_operations);
|