[SCSI] mptfusion: fix panic loading driver statically compiled
authorMoore, Eric Dean <Eric.Moore@lsil.com>
Sat, 30 Apr 2005 22:09:38 +0000 (17:09 -0500)
committerJames Bottomley <jejb@mulgrave.(none)>
Fri, 20 May 2005 17:53:42 +0000 (12:53 -0500)
Adjust link ordering in the Makefile.  Also, the ioc->DoneCtx handles
for mptspi/mptfc in the message frame.  And I'm now not seeing the
panic.

Signed-off-by: Eric Moore <Eric.Moore@lsil.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/message/fusion/Makefile
drivers/message/fusion/mptbase.c
drivers/message/fusion/mptbase.h
drivers/message/fusion/mptfc.c
drivers/message/fusion/mptspi.c

index 1c99e355a33fdd5c2ef23cb9441066efa958cc85..1d2f9db813c15ff9bc7d8b867a4b46fdb0f5c8c4 100644 (file)
@@ -32,7 +32,7 @@
 
 #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-} LSI_LOGIC
 
-obj-$(CONFIG_FUSION_SPI)       += mptspi.o mptscsih.o mptbase.o
-obj-$(CONFIG_FUSION_FC)                += mptfc.o mptscsih.o mptbase.o
+obj-$(CONFIG_FUSION_SPI)       += mptbase.o mptscsih.o mptspi.o
+obj-$(CONFIG_FUSION_FC)                += mptbase.o mptscsih.o mptfc.o
 obj-$(CONFIG_FUSION_CTL)       += mptctl.o
 obj-$(CONFIG_FUSION_LAN)       += mptlan.o
index 42ed5e272dca8e62d552b9b238ba5880a81585f8..d2a3c086a995f34e2093daa7e1d3d49bd48796d8 100644 (file)
@@ -360,15 +360,8 @@ mpt_interrupt(int irq, void *bus_id, struct pt_regs *r)
                }
 
                if (freeme) {
-                       unsigned long flags;
-
                        /*  Put Request back on FreeQ!  */
-                       spin_lock_irqsave(&ioc->FreeQlock, flags);
-                       list_add_tail(&mf->u.frame.linkage.list, &ioc->FreeQ);
-#ifdef MFCNT
-                       ioc->mfcnt--;
-#endif
-                       spin_unlock_irqrestore(&ioc->FreeQlock, flags);
+                       mpt_free_msg_frame(ioc, mf);
                }
 
                mb();
@@ -735,8 +728,8 @@ mpt_get_msg_frame(int handle, MPT_ADAPTER *ioc)
                mf->u.frame.hwhdr.msgctxu.fld.cb_idx = handle;  /* byte */
                req_offset = (u8 *)mf - (u8 *)ioc->req_frames;
                                                                /* u16! */
-               req_idx = cpu_to_le16(req_offset / ioc->req_sz);
-               mf->u.frame.hwhdr.msgctxu.fld.req_idx = req_idx;
+               req_idx = req_offset / ioc->req_sz;
+               mf->u.frame.hwhdr.msgctxu.fld.req_idx = cpu_to_le16(req_idx);
                mf->u.frame.hwhdr.msgctxu.fld.rsvd = 0;
                ioc->RequestNB[req_idx] = ioc->NB_for_64_byte_frame; /* Default, will be changed if necessary in SG generation */
 #ifdef MFCNT
@@ -782,8 +775,8 @@ mpt_put_msg_frame(int handle, MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf)
        mf->u.frame.hwhdr.msgctxu.fld.cb_idx = handle;          /* byte */
        req_offset = (u8 *)mf - (u8 *)ioc->req_frames;
                                                                /* u16! */
-       req_idx = cpu_to_le16(req_offset / ioc->req_sz);
-       mf->u.frame.hwhdr.msgctxu.fld.req_idx = req_idx;
+       req_idx = req_offset / ioc->req_sz;
+       mf->u.frame.hwhdr.msgctxu.fld.req_idx = cpu_to_le16(req_idx);
        mf->u.frame.hwhdr.msgctxu.fld.rsvd = 0;
 
 #ifdef MPT_DEBUG_MSG_FRAME
index b338a154f78f5696dee83f300a47afad6d8ff68e..2c4bb69fc80a8a88389a982629bc0d5a9acd6f1e 100644 (file)
@@ -76,8 +76,8 @@
 #define COPYRIGHT      "Copyright (c) 1999-2005 " MODULEAUTHOR
 #endif
 
-#define MPT_LINUX_VERSION_COMMON       "3.03.00"
-#define MPT_LINUX_PACKAGE_NAME         "@(#)mptlinux-3.03.00"
+#define MPT_LINUX_VERSION_COMMON       "3.03.01"
+#define MPT_LINUX_PACKAGE_NAME         "@(#)mptlinux-3.03.01"
 #define WHAT_MAGIC_STRING              "@" "(" "#" ")"
 
 #define show_mptmod_ver(s,ver)  \
index 91c79e525d3ca909ec49fdebb73399ad4a5d431c..11845faeede572de078c40872d19ffa4f0fe06da 100644 (file)
@@ -166,6 +166,9 @@ mptfc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
                return r;
        
        ioc = pci_get_drvdata(pdev);
+       ioc->DoneCtx = mptfcDoneCtx;
+       ioc->TaskCtx = mptfcTaskCtx;
+       ioc->InternalCtx = mptfcInternalCtx;
 
        /*  Added sanity check on readiness of the MPT adapter.
         */
@@ -325,10 +328,6 @@ mptfc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        hd->timer.data = (unsigned long) hd;
        hd->timer.function = mptscsih_timer_expired;
 
-       ioc->DoneCtx = mptfcDoneCtx;
-       ioc->TaskCtx = mptfcTaskCtx;
-       ioc->InternalCtx = mptfcInternalCtx;
-
        hd->mpt_pq_filter = mpt_pq_filter;
 
        ddvprintk((MYIOC_s_INFO_FMT
index a4e3c96524e78b840b4657404471f64fe5c0c671..5f9a61b85b3b6c3b0c65c1f0581f21fe09769b22 100644 (file)
@@ -180,6 +180,9 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
                return r;
        
        ioc = pci_get_drvdata(pdev);
+       ioc->DoneCtx = mptspiDoneCtx;
+       ioc->TaskCtx = mptspiTaskCtx;
+       ioc->InternalCtx = mptspiInternalCtx;
        
        /*  Added sanity check on readiness of the MPT adapter.
         */
@@ -395,10 +398,6 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        hd->scandv_wait_done = 0;
        hd->last_queue_full = 0;
 
-       ioc->DoneCtx = mptspiDoneCtx;
-       ioc->TaskCtx = mptspiTaskCtx;
-       ioc->InternalCtx = mptspiInternalCtx;
-
        error = scsi_add_host (sh, &ioc->pcidev->dev);
        if(error) {
                dprintk((KERN_ERR MYNAM