From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758901AbcAMLgu (ORCPT ); Wed, 13 Jan 2016 06:36:50 -0500 Received: from mail-ig0-f174.google.com ([209.85.213.174]:34742 "EHLO mail-ig0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754329AbcAMLgr (ORCPT ); Wed, 13 Jan 2016 06:36:47 -0500 MIME-Version: 1.0 In-Reply-To: References: <5674A5C3.1050504@oracle.com> Date: Wed, 13 Jan 2016 17:06:47 +0530 Message-ID: Subject: Re: mm, vmstat: kernel BUG at mm/vmstat.c:1408! From: Shiraz Hashim To: Christoph Lameter Cc: Sasha Levin , Michal Hocko , LKML , "linux-mm@kvack.org" Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Sasha, On Tue, Jan 12, 2016 at 5:53 PM, Christoph Lameter 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 > > 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