Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8041708e authored by Hannes Reinecke's avatar Hannes Reinecke Committed by James Bottomley
Browse files

am53c974: Fix crash during modprobe



On systems with shared interrupts the interrupt routine might
be called as soon as the interrupt is enabled.
As this might happen before pci_set_drvdata() is called the
system would crash.

Reported-by: default avatarAndreas Brogle <anbro@ok.de>
Tested-by: default avatarAndreas Brogle <anbro@ok.de>
Signed-off-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarJames Bottomley <JBottomley@Odin.com>
parent 16b8528d
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -476,6 +476,8 @@ static int pci_esp_probe_one(struct pci_dev *pdev,
		goto fail_unmap_regs;
	}

	pci_set_drvdata(pdev, pep);

	err = request_irq(pdev->irq, scsi_esp_intr, IRQF_SHARED,
			  DRV_MODULE_NAME, esp);
	if (err < 0) {
@@ -496,8 +498,6 @@ static int pci_esp_probe_one(struct pci_dev *pdev,
	/* Assume 40MHz clock */
	esp->cfreq = 40000000;

	pci_set_drvdata(pdev, pep);

	err = scsi_esp_register(esp, &pdev->dev);
	if (err)
		goto fail_free_irq;
@@ -507,6 +507,7 @@ static int pci_esp_probe_one(struct pci_dev *pdev,
fail_free_irq:
	free_irq(pdev->irq, esp);
fail_unmap_command_block:
	pci_set_drvdata(pdev, NULL);
	pci_free_consistent(pdev, 16, esp->command_block,
			    esp->command_block_dma);
fail_unmap_regs:
@@ -530,6 +531,7 @@ static void pci_esp_remove_one(struct pci_dev *pdev)

	scsi_esp_unregister(esp);
	free_irq(pdev->irq, esp);
	pci_set_drvdata(pdev, NULL);
	pci_free_consistent(pdev, 16, esp->command_block,
			    esp->command_block_dma);
	pci_iounmap(pdev, esp->regs);