Re: [RFC PATCH v2 09/14] m68k: hp300: Remove hp300_gettimeoffset()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 21 Nov 2018, Geert Uytterhoeven wrote:

This suggests that either 0 or N (the latched value) would result from 
a read from the counter immediately following an interrupt. Who can 
say which? Just have to try it. The answer should allow us to avoid 
the risk of a clocksource that jumps forwards and backwards.

The code in amiga_gettimeoffset() does:

        ticks = hi << 8 | lo;

        if (ticks > jiffy_ticks / 2)
                /* check for pending interrupt */
                if (cia_set_irq(&ciab_base, 0) & CIA_ICR_TA)
                        offset = 10000;


That _suggests_ that there's no interrupt when ticks == 0.

But look what happens next:

        ticks = jiffy_ticks - ticks;

        ticks = (10000 * ticks) / jiffy_ticks;

        return (ticks + offset) * 1000;

If (hi << 8 | lo) == 0, and you set offset = 10000, then the return value 
would be maximal.

Let's immediately call this function again. This time (hi << 8 | lo) == N. 
Let's add the offset again. I'm afraid the clock just jumped backwards.

So the logic you quoted has a rationale which is unrelated to the 
question.

-- 



[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux