lkml.org 
[lkml]   [2013]   [Mar]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v3 4/5] clocksource: Enable clocksource_cyc2ns() to cover big cycles
    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.

    -hpa

    /*
    * Convert jiffies to milliseconds and back.
    *
    * Avoid unnecessary multiplications/divisions in the
    * two most common HZ cases:
    */
    unsigned int jiffies_to_msecs(const unsigned long j)
    {
    #if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
    return (MSEC_PER_SEC / HZ) * j;
    #elif HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC)
    return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC);
    #else
    # if BITS_PER_LONG == 32
    return (HZ_TO_MSEC_MUL32 * j) >> HZ_TO_MSEC_SHR32; <---
    # else
    return (j * HZ_TO_MSEC_NUM) / HZ_TO_MSEC_DEN;
    # endif
    #endif
    }

    --
    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/

    \
     
     \ /
      Last update: 2013-03-06 23:03    [W:3.464 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site