lkml.org 
[lkml]   [2016]   [Jan]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: mm, vmstat: kernel BUG at mm/vmstat.c:1408!
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@linux.com>

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);
}

/*



\
 
 \ /
  Last update: 2016-01-12 14:01    [W:2.254 / U:0.132 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site