Re: [PATCH v3 4/5] clocksource: Enable clocksource_cyc2ns() to coverbig cycles

From: Thomas Gleixner
Date: Wed Mar 06 2013 - 16:29:38 EST


On Wed, 6 Mar 2013, H. Peter Anvin wrote:
> On 03/06/2013 01:15 PM, Thomas Gleixner wrote:
> > On Wed, 6 Mar 2013, H. Peter Anvin wrote:
> >
> >> On 03/06/2013 06:09 AM, Thomas Gleixner wrote:
> >>>
> >>> This breaks everything which does not have a 64/32bit divide
> >>> instruction. And you can't replace it with do_div() as that would
> >>> impose massive overhead on those architectures in the fast path.
> >>>
> >>
> >> Could we do the same kind of scaling-by-multiplication that we do in
> >> kernel/time.c for this?
> >
> > Not sure what you are referring to. kernel/time.c contains a lot of stuff :)
> >
>
> This stuff, specifically the third clause (which incidentally could be
> extended to the fourth clause without much trouble... I have
> experimented with it already.)
>
> It uses a N*N->2N multiply and a shift to do overflowless scaling; it is
> ±1 LSB in the upper half of the value range with can be remedied with an
> additional 2N add.

That's compile time. We need this at runtime and we do not want to
reduce the accuracy. That's precision timekeeping not jiffies :)

Thanks,

tglx