On Tue, May 12, 2015 at 7:14 AM, Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote: > On Fri, 8 May 2015, John Stultz wrote: >> +static inline s64 ktime_divns(const ktime_t kt, s64 div) >> { >> + /* >> + * Negative divisors could cause an inf loop, >> + * so bug out here. >> + */ >> + BUG_ON(div < 0); >> if (__builtin_constant_p(div) && !(div >> 32)) { >> - u64 ns = kt.tv64; >> + s64 ns = kt.tv64; >> + int neg = (ns < 0); >> + >> + if (neg) >> + ns = -ns; >> do_div(ns, div); > > This triggers the typecheck for u64 in do_div(). The delta patch below > should do the trick. > I started looking into this, and this landed in my inbox. Thanks Thomas! :) I reproduced the issue w/ the kbuildbot instructions and the patch below resolves it. Acked-by: John Stultz <john.stultz@xxxxxxxxxx> > diff --git a/include/linux/ktime.h b/include/linux/ktime.h > index ab2de1c7932c..b9620ebe356f 100644 > --- a/include/linux/ktime.h > +++ b/include/linux/ktime.h > @@ -177,13 +177,13 @@ static inline s64 ktime_divns(const ktime_t kt, s64 div) > if (__builtin_constant_p(div) && !(div >> 32)) { > s64 ns = kt.tv64; > int neg = (ns < 0); > + u64 tmp; > > if (neg) > ns = -ns; > - do_div(ns, div); > - if (neg) > - ns = -ns; > - return ns; > + tmp = ns; > + do_div(tmp, div); > + return neg ? -tmp : tmp; > } else { > return __ktime_divns(kt, div); > } > diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c > index c98ce4d9f613..bac65f810afd 100644 > --- a/kernel/time/hrtimer.c > +++ b/kernel/time/hrtimer.c > @@ -268,8 +268,9 @@ lock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags) > */ > s64 __ktime_divns(const ktime_t kt, s64 div) > { > - s64 dclc; > int neg, sft = 0; > + s64 dclc; > + u64 tmp; > > dclc = ktime_to_ns(kt); > neg = (dclc < 0); > @@ -280,12 +281,9 @@ s64 __ktime_divns(const ktime_t kt, s64 div) > sft++; > div >>= 1; > } > - dclc >>= sft; > - do_div(dclc, (unsigned long) div); > - if (neg) > - dclc = -dclc; > - > - return dclc; > + tmp = dclc >> sft; > + do_div(tmp, (unsigned long) div); > + return neg ? -tmp : tmp; > } > EXPORT_SYMBOL_GPL(__ktime_divns); > #endif /* BITS_PER_LONG >= 64 */ -- 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