lkml.org 
[lkml]   [2007]   [Sep]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: 2.6.23-rc3-mm1 - vdso and gettimeofday issues with glibc
    On 09/01/2007 06:07 AM, Andi Kleen wrote:
    >> write_seqlock_irqsave(&vsyscall_gtod_data.lock, flags);
    >> /* copy vsyscall data */
    >> vsyscall_gtod_data.clock.vread = clock->vread;
    >> vsyscall_gtod_data.clock.cycle_last = clock->cycle_last;
    >> vsyscall_gtod_data.clock.mask = clock->mask;
    >> vsyscall_gtod_data.clock.mult = clock->mult;
    >> vsyscall_gtod_data.clock.shift = clock->shift;
    >> vsyscall_gtod_data.wall_time_sec = wall_time->tv_sec;
    >> vsyscall_gtod_data.wall_time_nsec = wall_time->tv_nsec; <===
    >> vsyscall_gtod_data.sys_tz = sys_tz;
    >> vsyscall_gtod_data.wall_time_nsec = wall_time->tv_nsec; <===
    >
    > Must have been a (harmless) merging mistake, but I bet gcc optimizes it out
    > anyways.
    >

    I did find this after some digging:


    In the vdso code:

    static inline long vgetns(void)
    {
    cycles_t (*vread)(void);
    vread = gtod->clock.vread;
    return ((vread() - gtod->clock.cycle_last) * gtod->clock.mult) >>
    gtod->clock.shift;
    }


    Looks like an open-coded version of this in the kernel timekeeping code:

    static inline s64 __get_nsec_offset(void)
    {
    cycle_t cycle_now, cycle_delta;
    s64 ns_offset;

    /* read clocksource: */
    cycle_now = clocksource_read(clock);

    /* calculate the delta since the last update_wall_time: */
    cycle_delta = (cycle_now - clock->cycle_last) & clock->mask;

    /* convert to nanoseconds: */
    ns_offset = cyc2ns(clock, cycle_delta);

    return ns_offset;
    }

    But the vdso version isn't doing any masking. And the mask is different for
    different clocksources, so it has to track the underlying kernel's clocksource
    when it gets changed.

    -
    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: 2007-09-07 21:41    [W:4.608 / U:0.656 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site