* John Stultz <john.stultz@xxxxxxxxxx> wrote: > In 780427f0e11 (Indicate that clock was set in the pvclock > gtod notifier), logic was added to pass a CLOCK_WAS_SET > notification to the pvclock notifier chain. > > While that patch added a action flag returned from > accumulate_nsecs_to_secs(), it only uses the returned value > in one location, and not in the logarithmic accumulation. > > This means if a leap second triggered during the logarithmic > accumulation (which is most likely where it would happen), > the notification that the clock was set would not make it to > the pv notifiers. > > This patch extends the logarithmic_accumulation pass down > that action flag so proper notification will occur. > > Cc: Sasha Levin <sasha.levin@xxxxxxxxxx> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Cc: Ingo Molnar <mingo@xxxxxxxxxx> > Cc: David Vrabel <david.vrabel@xxxxxxxxxx> > Cc: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> > Cc: Prarit Bhargava <prarit@xxxxxxxxxx> > Cc: Richard Cochran <richardcochran@xxxxxxxxx> > Cc: <xen-devel@xxxxxxxxxxxxx> > Cc: stable <stable@xxxxxxxxxxxxxxx> #3.11+ > Signed-off-by: John Stultz <john.stultz@xxxxxxxxxx> > --- > kernel/time/timekeeping.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c > index 6bad3d9..998ec751 100644 > --- a/kernel/time/timekeeping.c > +++ b/kernel/time/timekeeping.c > @@ -1295,7 +1295,7 @@ static inline unsigned int accumulate_nsecs_to_secs(struct timekeeper *tk) > * Returns the unconsumed cycles. > */ > static cycle_t logarithmic_accumulation(struct timekeeper *tk, cycle_t offset, > - u32 shift) > + u32 shift, unsigned int *action) I have two complaints about this patch: 1) I think the 'action' name sucks because it's too obfuscated. It's only ever set to TK_CLOCK_WAS_SET, so why not name it more descriptively, i.e. 'clock_was_set'? 2) Secondly, the proliferation of parameters passed around I think calls for a helper structure which would carry the (offset, shift, clock_was_set) triple: struct acc_params { cycle_t offset; u32 shift; bool clock_was_set; }; And then passed down like this: > static cycle_t logarithmic_accumulation(struct timekeeper *tk, struct acc_params *params) Agreed? Thanks, Ingo -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html