[ Upstream commit 8030cb9a55688c1339edd284d9d6ce5f9fc75160 ]
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:
|
||
|---|---|---|
| .. | ||
| Kconfig | ||
| Makefile | ||
| apr.c | ||
| cmd-db.c | ||
| cpr.c | ||
| kryo-l2-accessors.c | ||
| llcc-qcom.c | ||
| mdt_loader.c | ||
| ocmem.c | ||
| pdr_interface.c | ||
| pdr_internal.h | ||
| qcom-geni-se.c | ||
| qcom_aoss.c | ||
| qcom_gsbi.c | ||
| qmi_encdec.c | ||
| qmi_interface.c | ||
| rmtfs_mem.c | ||
| rpmh-internal.h | ||
| rpmh-rsc.c | ||
| rpmh.c | ||
| rpmhpd.c | ||
| rpmpd.c | ||
| smd-rpm.c | ||
| smem.c | ||
| smem_state.c | ||
| smp2p.c | ||
| smsm.c | ||
| socinfo.c | ||
| trace-rpmh.h | ||
| wcnss_ctrl.c | ||