Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752789AbbFEABr (ORCPT ); Thu, 4 Jun 2015 20:01:47 -0400 Received: from mail-qk0-f178.google.com ([209.85.220.178]:33177 "EHLO mail-qk0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752074AbbFEABp (ORCPT ); Thu, 4 Jun 2015 20:01:45 -0400 Date: Thu, 4 Jun 2015 17:01:42 -0700 From: Jeremiah Mahler To: John Stultz Cc: Thomas Gleixner , Preeti U Murthy , Peter Zijlstra , Viresh Kumar , Marcelo Tosatti , Frederic Weisbecker , lkml , Ingo Molnar Subject: Re: [BUG, bisect] hrtimer: severe lag after suspend & resume Message-ID: <20150605000142.GA1761@hudson.localdomain> Mail-Followup-To: Jeremiah Mahler , John Stultz , Thomas Gleixner , Preeti U Murthy , Peter Zijlstra , Viresh Kumar , Marcelo Tosatti , Frederic Weisbecker , lkml , Ingo Molnar References: <20150604005624.GA1789@hudson.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1965 Lines: 60 John, On Thu, Jun 04, 2015 at 03:54:35PM -0700, John Stultz wrote: > On Wed, Jun 3, 2015 at 5:56 PM, Jeremiah Mahler wrote: [...] > > > So I suspect the problem is the change to clock_was_set_seq in > timekeeping_update is done prior to mirroring the time state to the > shadow-timekeeper. Thus the next time we do update_wall_time() the > updated sequence is overwritten by whats in the shadow copy. The > attached patch moving the modification up seems to avoid the issue for > me. > > Thomas: Looking at the problematic change, I'm not a big fan of it. > Caching timekeeping state here in the hrtimer code has been a source > of bugs in the past, and I'm not sure I see how avoiding copying > 24bytes is that big of a win. Especially since it adds more state to > the timekeeper and hrtimer base that we have to read and mange. > Personally I'd prefer a revert to my fix. > > thanks > -john > diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c > index 90ed5db..53be796 100644 > --- a/kernel/time/timekeeping.c > +++ b/kernel/time/timekeeping.c > @@ -580,6 +580,9 @@ static void timekeeping_update(struct timekeeper *tk, unsigned int action) > ntp_clear(); > } > > + if (action & TK_CLOCK_WAS_SET) > + tk->clock_was_set_seq++; > + > tk_update_ktime_data(tk); > > update_vsyscall(tk); > @@ -591,9 +594,6 @@ static void timekeeping_update(struct timekeeper *tk, unsigned int action) > > update_fast_timekeeper(&tk->tkr_mono, &tk_fast_mono); > update_fast_timekeeper(&tk->tkr_raw, &tk_fast_raw); > - > - if (action & TK_CLOCK_WAS_SET) > - tk->clock_was_set_seq++; > } > > /** That patch fixes the problem for me. Thanks John. -- - Jeremiah Mahler -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/