From: Maarten Lankhorst <[email protected]>

The LPE audio interrupt comes from the i915 interrupt handler. It
should be in irq disabled context.

With PREEMPT_RT enabled, the IRQ handler is threaded.
Because intel_lpe_audio_irq_handler() may be called in threaded IRQ context,
generic_handle_irq_safe API disables the interrupts before calling LPE's
interrupt top half handler.

This fixes braswell audio issues with RT enabled.

Signed-off-by: Maarten Lankhorst <[email protected]>
Reviewed-by: Matthew Brost <[email protected]>
Reviewed-by: Uma Shankar <[email protected]>
Signed-off-by: Runyu Xiao <[email protected]>
---
v3:
- Rebase the standalone patch on Maarten Lankhorst's original fix
- Keep Maarten Lankhorst as author per Sebastian's feedback
- Carry forward Maarten's Reviewed-by tags

 drivers/gpu/drm/i915/display/intel_lpe_audio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_lpe_audio.c 
b/drivers/gpu/drm/i915/display/intel_lpe_audio.c
index 42284e9928f2..ac1dfd592a9f 100644
--- a/drivers/gpu/drm/i915/display/intel_lpe_audio.c
+++ b/drivers/gpu/drm/i915/display/intel_lpe_audio.c
@@ -263,7 +263,7 @@ void intel_lpe_audio_irq_handler(struct intel_display 
*display)
        if (!HAS_LPE_AUDIO(display))
                return;
 
-       ret = generic_handle_irq(display->audio.lpe.irq);
+       ret = generic_handle_irq_safe(display->audio.lpe.irq);
        if (ret)
                drm_err_ratelimited(display->drm,
                                    "error handling LPE audio irq: %d\n", ret);
-- 
2.34.1

Reply via email to