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.

-- 

Reply via email to