Messages in this thread | | | Subject | Re: [PATCH v2] time: Fix sleeptime injection for non-stop clocksource & persistent clock | From | Mukesh Ojha <> | Date | Thu, 14 Jun 2018 19:37:28 +0530 |
| |
Any input on this ?
Thanks, Mukesh On 5/30/2018 5:14 PM, Mukesh Ojha wrote: > Currently, for both non-stop clocksource and persistent clock > there is a corner case, when a driver failed to go suspend mode. > rtc_resume() injects the sleeptime as timekeeping_rtc_skipresume() > returned 'false'(sleeptime_injected=false) due to which we can > see mismatch in timestamps between system clock and other timers. > > Fix this by updating sleeptime_injected=true for both non-stop > clocksource and persistent clock. > > Success case: > ------------ > {sleeptime_injected=true} > rtc_suspend() => timekeeping_suspend() => timekeeping_resume() => > rtc_resume() > > Failure case: > ------------ > {failure in sleep path} {sleeptime_injected=false} > rtc_suspend() => rtc_resume() > > Signed-off-by: Mukesh Ojha <mojha@codeaurora.org> > --- > Changes in v2: > * Updated the commit text. > * Removed extra variable and used the earlier static > variable 'sleeptime_injected'. > > kernel/time/timekeeping.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c > index 49cbcee..2754c1b 100644 > --- a/kernel/time/timekeeping.c > +++ b/kernel/time/timekeeping.c > @@ -1610,6 +1610,17 @@ static void __timekeeping_inject_sleeptime(struct timekeeper *tk, > */ > bool timekeeping_rtc_skipresume(void) > { > + struct timekeeper *tk = &tk_core.timekeeper; > + /* > + * This is to ensure that we don't end up injecting > + * the sleeptime via rtc_resume() for non-stop clocksource > + * when we fail to sleep. > + */ > + if (!sleeptime_injected) > + sleeptime_injected = ((tk->tkr_mono.clock->flags & > + CLOCK_SOURCE_SUSPEND_NONSTOP) || > + (persistent_clock_exists)) ? true : false; > + > return sleeptime_injected; > } >
| |