public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] - mptfusion - fix panic loading driver statically compile d
@ 2005-04-28 22:15 Moore, Eric Dean
  2005-04-28 22:27 ` Christoph Hellwig
  2005-04-28 22:28 ` James Bottomley
  0 siblings, 2 replies; 4+ messages in thread
From: Moore, Eric Dean @ 2005-04-28 22:15 UTC (permalink / raw)
  To: linux-scsi, James.Bottomley, akpm

[-- Attachment #1: Type: text/plain, Size: 438 bytes --]

This patch can also be found at this URL:
ftp://ftp.lsil.com/HostAdapterDrivers/linux/FiberChannel/2.6-kernel/3.03.01/

Changelog:
(1) For statically linked drivers, fusion_init was not called,
added call from mpt_register so its called when one of the scsi lld load.
(2) little endian fix in mpt_put_msg_frame/mpt_get_msg_frame
(3) Clarify help desc in Kconfig for FUSION_MAX_SGE.


Signed-off-by: Eric Moore <Eric.Moore@lsil.com>







[-- Attachment #2: mptlinux-3.03.01.patch --]
[-- Type: application/octet-stream, Size: 4598 bytes --]

diff -uarN b/drivers/message/fusion/Kconfig a/drivers/message/fusion/Kconfig
--- b/drivers/message/fusion/Kconfig	2005-04-25 15:45:54.000000000 -0600
+++ a/drivers/message/fusion/Kconfig	2005-04-28 14:48:40.000000000 -0600
@@ -36,17 +36,16 @@
 	  LSIFC929XL
 
 config FUSION_MAX_SGE
-	int "Maximum number of scatter gather entries"
+	int "Maximum number of scatter gather entries (16 - 128)"
 	depends on FUSION_SPI || FUSION_FC
 	default "128"
+	range 16 128
 	help
 	  This option allows you to specify the maximum number of scatter-
-	  gather entries per I/O. The driver defaults to 40, a reasonable number
-	  for most systems. However, the user may increase this up to 128.
-	  Increasing this parameter will require significantly more memory
-	  on a per controller instance. Increasing the parameter is not
-	  necessary (or recommended) unless the user will be running
-	  large I/O's via the raw interface.
+	  gather entries per I/O. The driver default is 128, which matches
+	  SCSI_MAX_PHYS_SEGMENTS. However, it may decreased down to 16.
+	  Decreasing this parameter will reduce memory requirements
+	  on a per controller instance.
 
 config FUSION_CTL
 	tristate "Fusion MPT misc device (ioctl) driver"
diff -uarN b/drivers/message/fusion/mptbase.c a/drivers/message/fusion/mptbase.c
--- b/drivers/message/fusion/mptbase.c	2005-04-25 15:45:54.000000000 -0600
+++ a/drivers/message/fusion/mptbase.c	2005-04-28 14:46:43.000000000 -0600
@@ -113,6 +113,7 @@
 					/* Reset handler lookup table */
 static MPT_RESETHANDLER		 MptResetHandlers[MPT_MAX_PROTOCOL_DRIVERS];
 static struct mpt_pci_driver 	*MptDeviceDriverHandlers[MPT_MAX_PROTOCOL_DRIVERS];
+static int	FusionInitCalled = 0;
 
 static int	mpt_base_index = -1;
 static int	last_drv_idx = -1;
@@ -360,15 +361,8 @@
 		}
 
 		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();
@@ -530,6 +524,21 @@
 
 	last_drv_idx = -1;
 
+#ifndef MODULE
+	/*
+	 *  Handle possibility of the mptscsih_detect() routine getting
+	 *  called *before* fusion_init!
+	 */
+	if (!FusionInitCalled) {
+		dinitprintk((KERN_INFO MYNAM ": Hmmm, calling fusion_init from mpt_register!\n"));
+		/*
+		 *  NOTE! We'll get recursion here, as fusion_init()
+		 *  calls mpt_register()!
+		 */
+		fusion_init();
+		FusionInitCalled++;
+	}
+#endif
 	/*
 	 *  Search for empty callback slot in this order: {N,...,7,6,5,...,1}
 	 *  (slot/handle 0 is reserved!)
@@ -735,8 +744,8 @@
 		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 +791,8 @@
 	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
@@ -5769,6 +5778,11 @@
 {
 	int i;
 
+	if (FusionInitCalled++) {
+		dprintk((KERN_INFO MYNAM ": INFO - Driver late-init entry point called\n"));
+		return 0;
+	}
+	
 	show_mptmod_ver(my_NAME, my_VERSION);
 	printk(KERN_INFO COPYRIGHT "\n");
 
diff -uarN b/drivers/message/fusion/mptbase.h a/drivers/message/fusion/mptbase.h
--- b/drivers/message/fusion/mptbase.h	2005-04-25 15:45:54.000000000 -0600
+++ a/drivers/message/fusion/mptbase.h	2005-04-28 14:47:25.000000000 -0600
@@ -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)  \

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2005-04-28 22:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-04-28 22:15 [PATCH] - mptfusion - fix panic loading driver statically compile d Moore, Eric Dean
2005-04-28 22:27 ` Christoph Hellwig
2005-04-28 22:28 ` James Bottomley
2005-04-28 22:48   ` Andrew Morton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox