Skip to content

Commit

Permalink
am53c974: Fix crash during modprobe
Browse files Browse the repository at this point in the history
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: Andreas Brogle <anbro@ok.de>
Tested-by: Andreas Brogle <anbro@ok.de>
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: James Bottomley <JBottomley@Odin.com>
  • Loading branch information
Hannes Reinecke authored and James Bottomley committed Apr 17, 2015
1 parent 16b8528 commit 8041708
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions drivers/scsi/am53c974.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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;
Expand All @@ -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:
Expand All @@ -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);
Expand Down

0 comments on commit 8041708

Please sign in to comment.