• Paul Mackerras's avatar
    [POWERPC] Prevent decrementer clockevents from firing early · d968014b
    Paul Mackerras authored
    On old powermacs, we sometimes set the decrementer to 1 in order to
    trigger a decrementer interrupt, which we use to handle an interrupt
    that was pending at the time when it was re-enabled.  This was causing
    the decrementer clock event device to call the event function for the
    next event early, which was causing problems when high-res timers were
    not enabled.
    This fixes the problem by recording the timebase value at which the
    next event should occur, and checking the current timebase against the
    recorded value in timer_interrupt.  If it isn't time for the next
    event, it just reprograms the decrementer and returns.
    This also subtracts 1 from the value stored into the decrementer,
    which is appropriate because the decrementer interrupts on the
    transition from 0 to -1, not when the decrementer reaches 0.
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>