Commit 033e925f authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: x86: Fix possible stale interrupt calls



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: default avatarTakashi Iwai <tiwai@suse.de>
parent 437af8f2
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -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;
}