• Daniel Thompson's avatar
    soc: qcom: aoss: remove spurious IRQF_ONESHOT flags · 8030cb9a
    Daniel Thompson authored
    Quoting the header comments, IRQF_ONESHOT is "Used by threaded interrupts
    which need to keep the irq line disabled until the threaded handler has
    been run.". When applied to an interrupt that doesn't request a threaded
    irq then IRQF_ONESHOT has a lesser known (undocumented?) side effect,
    which it to disable the forced threading of the irq. For "normal" kernels
    (without forced threading) then, if there is no thread_fn, then
    IRQF_ONESHOT is a nop.
    
    In this case disabling forced threading is not appropriate for this driver
    because it calls wake_up_all() and this API cannot be called from
    no-thread interrupt handlers on PREEMPT_RT systems (deadlock risk, triggers
    sleeping-while-atomic warnings).
    
    Fix this by removing IRQF_ONESHOT.
    
    Fixes: 22094814
    
     ("soc: qcom: Add AOSS QMP driver")
    Signed-off-by: default avatarDaniel Thompson <daniel.thompson@linaro.org>
    [bjorn: Added Fixes tag]
    Signed-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
    Link: https://lore.kernel.org/...
    8030cb9a
qcom_aoss.c 13.1 KB