Hi Sasha, On Tue, Jan 12, 2016 at 5:53 PM, Christoph Lameter <cl@xxxxxxxxx> wrote: > On Tue, 12 Jan 2016, Shiraz Hashim wrote: > >> > + refresh_cpu_vm_stats(false); >> > + cancel_delayed_work(this_cpu_ptr(&vmstat_work)); >> > >> >> shouldn't this be cancel_delayed_work_sync ? > > Hmmm... This is executed with preemption off and the work is on the same > cpu. If it would be able to run concurrently then we would need this. > > Ok but it could run from the timer interrupt if that is still on and > occuring shortly before we go idle. Guess this needs to be similar to > the code we execute on cpu down in the vmstat notifiers (see > vmstat_cpuup_callback). > > Does this fix it? I have not been able to reproduce the issue so far. > > Patch against -next. > > > > Subject: vmstat: Use delayed work_sync and avoid loop. > > Signed-off-by: Christoph Lameter <cl@xxxxxxxxx> > > Index: linux/mm/vmstat.c > =================================================================== > --- linux.orig/mm/vmstat.c > +++ linux/mm/vmstat.c > @@ -1419,11 +1419,9 @@ void quiet_vmstat(void) > if (system_state != SYSTEM_RUNNING) > return; > > - do { > - if (!cpumask_test_and_set_cpu(smp_processor_id(), cpu_stat_off)) > - cancel_delayed_work(this_cpu_ptr(&vmstat_work)); > - > - } while (refresh_cpu_vm_stats(false)); > + refresh_cpu_vm_stats(false); > + cancel_delayed_work_sync(this_cpu_ptr(&vmstat_work)); > + cpumask_set_cpu(smp_processor_id(), cpu_stat_off); > } > > /* Can you please give it a try, seems it is reproducing easily at your end. -- regards Shiraz Hashim -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>