This patch sets the IOC pointer in drvrdata of pcidev before adding the IOC 
into the list of IOCs. Without this patch the driver oops when the mptsas and 
mptctl modules are loaded in parallel.

signed-off-by: Sathya Prakash <[EMAIL PROTECTED]>
---


diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index 355c172..d473146 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -1704,6 +1704,9 @@ mpt_attach(struct pci_dev *pdev, const struct 
pci_device_id *id)
        ioc->active = 0;
        CHIPREG_WRITE32(&ioc->chip->IntStatus, 0);
 
+       /* Set IOC ptr in the pcidev's driver data. */
+       pci_set_drvdata(ioc->pcidev, ioc);
+
        /* Set lookup ptr. */
        list_add_tail(&ioc->list, &ioc_list);
 
@@ -2074,7 +2077,6 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int 
sleepFlag)
                        irq_allocated = 1;
                        ioc->pci_irq = ioc->pcidev->irq;
                        pci_set_master(ioc->pcidev);            /* ?? */
-                       pci_set_drvdata(ioc->pcidev, ioc);
                        dprintk(ioc, printk(MYIOC_s_INFO_FMT "installed at 
interrupt "
                            "%d\n", ioc->name, ioc->pcidev->irq));
                }
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to