• Thomas Gleixner's avatar
    x86/hpet: Cure interface abuse in the resume path · bb68cfe2
    Thomas Gleixner authored
    The HPET resume path abuses irq_domain_[de]activate_irq() to restore the
    MSI message in the HPET chip for the boot CPU on resume and it relies on an
    implementation detail of the interrupt core code, which magically makes the
    HPET unmask call invoked via a irq_disable/enable pair. This worked as long
    as the irq code did unconditionally invoke the unmask() callback. With the
    recent changes which keep track of the masked state to avoid expensive
    hardware access, this does not longer work. As a consequence the HPET timer
    interrupts are not unmasked which breaks resume as the boot CPU waits
    forever that a timer interrupt arrives.
    
    Make the restore of the MSI message explicit and invoke the unmask()
    function directly. While at it get rid of the pointless affinity setting as
    nothing can change the affinity of the interrupt and the vector across
    suspend/resume. The restore of the MSI message reestablishes the previous
    affinity setting which is the correct one.
    
    Fixes: bf22ff45 ("genirq: Avoid unnecessary low level irq function calls")
    Reported-and-tested-by: default avatarTomi Sarvela <tomi.p.sarvela@intel.com>
    Reported-by: default avatarMartin Peres <martin.peres@linux.intel.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Acked-by: default avatar"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
    Cc: jeffy.chen@rock-chips.com
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Marc Zyngier <marc.zyngier@arm.com>
    Link: http://lkml.kernel.org/r/alpine.DEB.2.20.1707312158590.2287@nanos
    bb68cfe2
hpet.c 31.7 KB