• Jan Kiszka's avatar
    ipipe: Call present ack and end handlers for timer irq unconditionally · db2a0783
    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>
timer.c 16 KB