[alsa-devel] [PATCH 11/53] ALSA: x86: Fix possible stale interrupt calls
Takashi Iwai
tiwai at suse.de
Thu Feb 2 18:02:25 CET 2017
Registering the irq handler at the too early place may cause a system
stall because the irq handler may be triggered before the other
initializations. Move the irq handler registration to the later point.
Signed-off-by: Takashi Iwai <tiwai at suse.de>
---
sound/x86/intel_hdmi_lpe_audio.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/sound/x86/intel_hdmi_lpe_audio.c b/sound/x86/intel_hdmi_lpe_audio.c
index 54cc30f034f3..f5249b0a4ce4 100644
--- a/sound/x86/intel_hdmi_lpe_audio.c
+++ b/sound/x86/intel_hdmi_lpe_audio.c
@@ -400,16 +400,6 @@ static int hdmi_lpe_audio_probe(struct platform_device *pdev)
return -EACCES;
}
- /* setup interrupt handler */
- ret = request_irq(irq, display_pipe_interrupt_handler,
- 0,
- pdev->name,
- NULL);
- if (ret < 0) {
- dev_err(&hlpe_pdev->dev, "request_irq failed\n");
- goto error_irq;
- }
-
/* alloc and save context */
ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
if (ctx == NULL) {
@@ -438,11 +428,21 @@ static int hdmi_lpe_audio_probe(struct platform_device *pdev)
if (pdata == NULL) {
dev_err(&hlpe_pdev->dev, "%s: quit: pdata not allocated by i915!!\n", __func__);
ret = -ENOMEM;
- goto error_probe;
+ goto error_irq;
}
platform_set_drvdata(pdev, ctx);
+ /* setup interrupt handler */
+ ret = request_irq(irq, display_pipe_interrupt_handler,
+ 0,
+ pdev->name,
+ NULL);
+ if (ret < 0) {
+ dev_err(&hlpe_pdev->dev, "request_irq failed\n");
+ goto error_irq;
+ }
+
ret = hdmi_audio_probe(pdev, &ctx->had);
if (ret < 0)
goto error_probe;
@@ -469,10 +469,10 @@ static int hdmi_lpe_audio_probe(struct platform_device *pdev)
return ret;
error_probe:
- kfree(ctx);
- error_ctx:
free_irq(irq, NULL);
error_irq:
+ kfree(ctx);
+ error_ctx:
iounmap(mmio_start);
return ret;
}
--
2.11.0
More information about the Alsa-devel
mailing list