Skip to contentSkip to conversation

some confusion in timekeeping

DISCUSSION Da Zheng 1 participant 1 message Aug 17, 2011

lore
Share & tools
lore

Da Zheng

author
#0 lore raw

Hello,

I try to understand the code in kernel/time/timekeeping.c, but it's very confusing. The most confusing part is shift. I don't understand why we need that? I notice that (clocksource.mult >> clocksource.shift) is the number of nanoseconds for each cycle, but I don't see a point why shift should be used. For example, the code below makes no sense to me. If clock->mult is the number of nanoseconds for a cycle, then we don't need to shift `tmp'.

        tmp = NTP_INTERVAL_LENGTH;
        tmp <<= clock->shift;
        ntpinterval = tmp;
        tmp += clock->mult/2;
        do_div(tmp, clock->mult);

clocksource_jiffies uses 8 as the shift value, but I don't know why it is chosen. clocks_calc_mult_shift() is used to calculate shift and mult, but I don't understand how the algorithm works there. It seems there is very few documents about timekeeping.c

Can anyone help me understand the code or point me to some documents?

Thanks a lot,
Da