Oleg Nesterov wrote: > On 05/08, Oleg Nesterov wrote: > > > > On 05/08, Jiri Slaby wrote: > > > > This should not happen because we are doing cancel_rearming_delayed_work() > > below, however: > > > > > + case CPU_DOWN_PREPARE: > > > + case CPU_DOWN_PREPARE_FROZEN: > > > + cancel_rearming_delayed_work(&per_cpu(vmstat_work, cpu)); > > > + per_cpu(vmstat_work, cpu).work.func = NULL; > > > + case CPU_DOWN_FAILED: > > > + case CPU_DOWN_FAILED_FROZEN: > > > + start_cpu_timer(cpu); > > > > we need a "break;" before "case CPU_DOWN_FAILED", otherwise we re-start > > vmstat_update() immediately. > > > > This is a bug, but I am not sure is this the only problem. > > In case I was not clear, this _can_ explain the problem. Because an extra > start_cpu_timer() (due to missed "break;") re-initializes dwork, and clears > _PENDING. Yes, it helped, thanks. If no objections, please apply the patch below. -- vmstat-use-our-own-timer-events-fix add missing break Cc: Christoph Lameter <clameter@xxxxxxx> Cc: Arjan van de Ven <arjan@xxxxxxxxxxxxxxx> Signed-off-by: Jiri Slaby <jirislaby@xxxxxxxxx> --- commit e0fe3cf4776a3c16ac7625ce9eae75ea42eb9b4e tree c9a4277860e2cea03911b3d73c9386c9284d991b parent b1034323f7e57642eee59a0f5e77c50bc26982c5 author Jiri Slaby <jirislaby@xxxxxxxxx> Tue, 08 May 2007 16:25:28 +0200 committer Jiri Slaby <jirislaby@xxxxxxxxx> Tue, 08 May 2007 16:25:28 +0200 mm/vmstat.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/mm/vmstat.c b/mm/vmstat.c index 709e2f0..fac05e8 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -677,6 +677,7 @@ static int __cpuinit vmstat_cpuup_callback(struct notifier_block *nfb, case CPU_DOWN_PREPARE_FROZEN: cancel_rearming_delayed_work(&per_cpu(vmstat_work, cpu)); per_cpu(vmstat_work, cpu).work.func = NULL; + break; case CPU_DOWN_FAILED: case CPU_DOWN_FAILED_FROZEN: start_cpu_timer(cpu); _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm