• Jan Kiszka's avatar
    ipipe: Call present ack and end handlers for timer irq unconditionally · e94b0a88
    Jan Kiszka authored
    These steps must be done unconditionally, because if
    __ipipe_ack_hrtimer_irq() is called, the tick event will be delivered to
    the head domain next, which will neither call ipipe_end() for a tick
    event, nor propagate such event to the root stage (at least not using
    the same IRQ line).
    
    This plugs a race for timers that are per-CPU but share the same
    interrupt number. When setting them up, there is a window where the
    first CPU already called ipipe_request_irq, but some other CPU did not
    yet ran through grab_timer, thus have ipipe_stolen = 0.
    
    It also solves boot issues with the TSC deadline timer in use.
    
    Based on reasoning provided by Philippe Gerum.
    Signed-off-by: Jan Kiszka's avatarJan Kiszka <jan.kiszka@siemens.com>
    e94b0a88
timer.c 16.4 KB