Skip to contentSkip to conversation

scsi: megaraid_{mm,mbox} init fix for kdump

PATCH In review Sumant Patro 3 participants 3 messages Jan 5, 2007 – Jan 31, 2007

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 scsi: megaraid_{mm,mbox} init fix for kdump

1. Changes in Initialization to fix kdump failure.
Send SYNC command on loading.
This command clears the pending commands in the adapter and re-initialize its internal RAID structure. Without this change, megaraid driver either panics or fails to initialize the adapter during kdump's second kernel boot if there are pending commands or interrupts from other devices sharing the same IRQ.
2. Authors email-id domain name changed from lsil.com to lsi.com.
Also modified the MODULE_AUTHOR to [email protected]

---

 Documentation/scsi/ChangeLog.megaraid |   16 ++
 drivers/scsi/megaraid/megaraid_mbox.c |  140 +++++++++++++++++++-----
 drivers/scsi/megaraid/megaraid_mbox.h |    4
 3 files changed, 130 insertions(+), 30 deletions(-)
Documentation/scsi/ChangeLog.megaraid 2007-01-04 12:09:36.000000000 -0800 renamed from Documentation/scsi/ChangeLog.megaraid 2006-12-28 10:10:31.000000000 -0800 +16 -0
diff -uprN linux-2.6.orig/Documentation/scsi/ChangeLog.megaraid linux-2.6.new/Documentation/scsi/ChangeLog.megaraid
@@ -1,3 +1,19 @@
+Release Date : Thu Nov 16 15:32:35 EST 2006 -
+    Sumant Patro <[email protected]>
+Current Version : 2.20.5.1 (scsi module), 2.20.2.6 (cmm module)
+Older Version : 2.20.4.9 (scsi module), 2.20.2.6 (cmm module)
+
+1. Changes in Initialization to fix kdump failure.
+ Send SYNC command on loading.
+ This command clears the pending commands in the adapter
+ and re-initialize its internal RAID structure.
+ Without this change, megaraid driver either panics or fails to
+ initialize the adapter during kdump's second kernel boot
+ if there are pending commands or interrupts from other devices
+ sharing the same IRQ.
+2.  Authors email-id domain name changed from lsil.com to lsi.com.
+ Also modified the MODULE_AUTHOR to [email protected]
+
 Release Date : Fri May 19 09:31:45 EST 2006 - Seokmann Ju <[email protected]>
 Current Version : 2.20.4.9 (scsi module), 2.20.2.6 (cmm module)
 Older Version : 2.20.4.8 (scsi module), 2.20.2.6 (cmm module)
drivers/scsi/megaraid/megaraid_mbox.c +112 -28

196 lines not on this page · raw message

drivers/scsi/megaraid/megaraid_mbox.h renamed from drivers/scsi/megaraid/megaraid_mbox.h 2006-12-28 09:56:04.000000000 -0800 +2 -2
diff -uprN linux-2.6.orig/drivers/scsi/megaraid/megaraid_mbox.h linux-2.6.new/drivers/scsi/megaraid/megaraid_mbox.h
@@ -21,8 +21,8 @@
 #include "megaraid_ioctl.h"
 
 
-#define MEGARAID_VERSION	"2.20.4.9"
-#define MEGARAID_EXT_VERSION	"(Release Date: Sun Jul 16 12:27:22 EST 2006)"
+#define MEGARAID_VERSION	"2.20.5.1"
+#define MEGARAID_EXT_VERSION	"(Release Date: Thu Nov 16 15:32:35 EST 2006)"
 
 
 /*
Documentation/scsi/ChangeLog.megaraid +16 -0
diff -uprN linux-2.6.orig/Documentation/scsi/ChangeLog.megaraid linux-2.6.new/Documentation/scsi/ChangeLog.megaraid
@@ -1,3 +1,19 @@
+Release Date	: Thu Nov 16 15:32:35 EST 2006 -
+				Sumant Patro <[email protected]>
+Current Version : 2.20.5.1 (scsi module), 2.20.2.6 (cmm module)
+Older Version	: 2.20.4.9 (scsi module), 2.20.2.6 (cmm module)
+
+1.	Changes in Initialization to fix kdump failure.
+	Send SYNC command on loading.
+	This command clears the pending commands in the adapter
+	and re-initialize its internal RAID structure.
+	Without this change, megaraid driver either panics or fails to
+	initialize the adapter during kdump's second kernel boot
+	if there are pending commands or interrupts from other devices
+	sharing the same IRQ.
+2. 	Authors email-id domain name changed from lsil.com to lsi.com.
+	Also modified the MODULE_AUTHOR to [email protected]
+
 Release Date	: Fri May 19 09:31:45 EST 2006 - Seokmann Ju <[email protected]>
 Current Version : 2.20.4.9 (scsi module), 2.20.2.6 (cmm module)
 Older Version	: 2.20.4.8 (scsi module), 2.20.2.6 (cmm module)
drivers/scsi/megaraid/megaraid_mbox.c +112 -28

196 lines not on this page · raw message

drivers/scsi/megaraid/megaraid_mbox.h +2 -2
diff -uprN linux-2.6.orig/drivers/scsi/megaraid/megaraid_mbox.h linux-2.6.new/drivers/scsi/megaraid/megaraid_mbox.h
@@ -21,8 +21,8 @@
 #include "megaraid_ioctl.h"
 
 
-#define MEGARAID_VERSION	"2.20.4.9"
-#define MEGARAID_EXT_VERSION	"(Release Date: Sun Jul 16 12:27:22 EST 2006)"
+#define MEGARAID_VERSION	"2.20.5.1"
+#define MEGARAID_EXT_VERSION	"(Release Date: Thu Nov 16 15:32:35 EST 2006)"
 
 
 /*
#1 lore raw

On Fri, 05 Jan 2007 07:10:09 -0800 Sumant Patro wrote:

Hi,

Quoted 11 lines

---

 Documentation/scsi/ChangeLog.megaraid |   16 ++
 drivers/scsi/megaraid/megaraid_mbox.c |  140 +++++++++++++++++++-----
 drivers/scsi/megaraid/megaraid_mbox.h |    4
 3 files changed, 130 insertions(+), 30 deletions(-)

diff -uprN linux-2.6.orig/drivers/scsi/megaraid/megaraid_mbox.c linux-2.6.new/drivers/scsi/megaraid/megaraid_mbox.c

drivers/scsi/megaraid/megaraid_mbox.c megaraid_mbox_flush_cache(adapter_t *ada · line 3390

Quoted 5 lines
drivers/scsi/megaraid/megaraid_mbox.c +2 -0
@@ -3380,6 +3386,84 @@ megaraid_mbox_flush_cache(adapter_t *ada
 
 
 /**
+ * megaraid_mbox_fire_sync_cmd - fire the sync cmd
+ * @param adapter	: soft state for the controller

That (above) should just be:
* @adapter: (plus its description; the description there doesn't seem to agree with its parameter name).

Quoted 69 lines
drivers/scsi/megaraid/megaraid_mbox.c +69 -0
+ *
+ * Clears the pending cmds in FW and reinits its RAID structs
+ */
+static int
+megaraid_mbox_fire_sync_cmd(adapter_t *adapter)
+{
+	mbox_t	*mbox;
+	uint8_t	raw_mbox[sizeof(mbox_t)];
+	mraid_device_t	*raid_dev = ADAP2RAIDDEV(adapter);
+	mbox64_t *mbox64;
+	int	status = 0;
+	int i;
+	uint32_t dword;
+
+	mbox = (mbox_t *)raw_mbox;
+
+	memset((caddr_t)raw_mbox, 0, sizeof(mbox_t));
+
+	raw_mbox[0] = 0xFF;
+
+	mbox64	= raid_dev->mbox64;
+	mbox	= raid_dev->mbox;
+
+	/* Wait until mailbox is free */
+	if (megaraid_busywait_mbox(raid_dev) != 0) {
+		status = 1;
+		goto blocked_mailbox;
+	}
+
+	/* Copy mailbox data into host structure */
+	memcpy((caddr_t)mbox, (caddr_t)raw_mbox, 16);
+	mbox->cmdid		= 0xFE;
+	mbox->busy		= 1;
+	mbox->poll		= 0;
+	mbox->ack		= 0;
+	mbox->numstatus		= 0;
+	mbox->status		= 0;
+
+	wmb();
+	WRINDOOR(raid_dev, raid_dev->mbox_dma | 0x1);
+
+	/* Wait for maximum 1 min for status to post.
+	 * If the Firmware SUPPORTS the ABOVE COMMAND,
+	 * mbox->cmd will be set to 0
+	 * else
+	 * the firmware will reject the command with
+	 * mbox->numstatus set to 1
+	 */
+
+	i = 0;
+	status = 0;
+	while (!mbox->numstatus && mbox->cmd == 0xFF) {
+		rmb();
+		msleep(1);
+		i++;
+		if (i > 1000 * 60) {
+			status = 1;
+			break;
+		}
+	}
+	if (mbox->numstatus == 1)
+		status = 1; /*cmd not supported*/
+
+	/* Check for interrupt line */
+	dword = RDOUTDOOR(raid_dev);
+	WROUTDOOR(raid_dev, dword);
+	WRINDOOR(raid_dev,2);
+
+	return status;

drivers/scsi/megaraid/megaraid_mbox.c megaraid_mbox_flush_cache(adapter_t *ada · line 3469

Quoted 10 lines
drivers/scsi/megaraid/megaraid_mbox.c +7 -0
+
+blocked_mailbox:
+	con_log(CL_ANN, (KERN_WARNING "megaraid: blocked mailbox\n"));
+	return status;
+}
+
+/**
  * megaraid_mbox_display_scb - display SCB information, mostly debug purposes
  * @param adapter	: controllers' soft state
  * @param scb  : SCB to be displayed

I haven't looked at the entire source file, but these extra "param" words should not be there. kernel-doc syntax is just
@name: description

---
~Randy

#2 lore raw
In reply to Sumant Patro
Quoted 6 lines · Sumant Patro

This command clears the pending commands in the adapter and re-initialize its internal RAID structure. Without this change, megaraid driver either panics or fails to initialize the adapter during kdump's second kernel boot if there are pending commands or interrupts from other devices sharing the same IRQ.

Nice. Is there a chance that this patch will also fix the regression I've noticed (today, unfortunately) on (at least one) Dell server?

FWIW, here's the relevant LSPCI output and kernel logs:

0d:0e.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID (rev 07)
Subsystem: Dell Unknown device 0002
Flags: bus master, stepping, 66MHz, medium devsel, latency 64, IRQ 18 Memory at d80f0000 (32-bit, prefetchable) [size=64K]
Memory at fc4c0000 (32-bit, non-prefetchable) [size=256K] Expansion ROM at fc500000 [disabled] [size=128K]
Capabilities: [c0] Power Management version 2
Capabilities: [d0] Message Signalled Interrupts: Mask- 64bit+ Queue=0/1 Enable-
Capabilities: [e0] PCI-X non-bridge device

Jan 31 14:41:34 kernel: [ 232.873327] megaraid cmm: 2.20.2.7 (Release Date: Sun Jul 16 00:01:03 EST 2006)
Jan 31 14:41:34 kernel: [ 232.877616] SCSI subsystem initialized
Jan 31 14:41:34 kernel: [ 232.888779] megaraid: 2.20.4.9 (Release Date: Sun Jul 16 12:27:22 EST 2006)
Jan 31 14:41:34 kernel: [ 232.889835] megasas: 00.00.03.05 Mon Oct 02 11:21:32 PDT 2006
Jan 31 14:41:34 kernel: [ 233.513659] megasas: 0x1028:0x0015:0x1028:0x1f03: <6>megaraid: probe new device 0x1000:0x0408:0x1028:0x0002: bus 13:slot 14:func 0
Jan 31 14:41:34 kernel: [ 233.514770] megasas: FW now in Ready state
Jan 31 14:41:34 kernel: [ 233.528893] megaraid: fw version:[522A] bios version:[H430]
Jan 31 14:41:34 kernel: [ 233.554778] scsi2 : LSI Logic SAS based MegaRAID driver
Jan 31 14:41:34 kernel: [ 233.555536] scsi 2:0:0:0: Direct-Access MAXTOR ATLAS10K5_073SAS BP00 PQ: 0 ANSI: 5
Jan 31 14:41:34 kernel: [ 233.556173] scsi 2:0:1:0: Direct-Access MAXTOR ATLAS10K5_073SAS BP00 PQ: 0 ANSI: 5
Jan 31 14:41:34 kernel: [ 233.569337] scsi3 : LSI Logic MegaRAID driver
Jan 31 14:41:34 kernel: [ 233.569550] scsi[3]: scanning scsi channel 0 [Phy 0] for non-raid devices
Jan 31 14:41:34 kernel: [ 233.604522] scsi 2:0:8:0: Enclosure DP BACKPLANE 1.00 PQ: 0 ANSI: 5
Jan 31 14:41:41 kernel: [ 243.115199] megaraid: aborting-16 cmd=12 <c=0 t=12 l=0>
Jan 31 14:41:41 kernel: [ 243.115206] megaraid abort: 16:0[0:12], fw owner
Jan 31 14:41:41 kernel: [ 243.115217] megaraid: 1 outstanding commands. Max wait 300 sec
Jan 31 14:41:41 kernel: [ 243.115221] megaraid mbox: Wait for 1 commands to complete:300
Jan 31 14:41:46 kernel: [ 248.125812] megaraid mbox: Wait for 1 commands to complete:295
Jan 31 14:41:48 kernel: [ 250.134075] megaraid mbox: reset sequence completed sucessfully
Jan 31 14:41:58 kernel: [ 260.117201] megaraid: aborting-16 cmd=0 <c=0 t=12 l=0>Jan 31 14:41:58 kernel: [ 260.117207] megaraid abort: 16:0[0:12], fw owner
Jan 31 14:41:58 kernel: [ 260.117217] megaraid: 1 outstanding commands. Max wait 300 sec
Jan 31 14:41:58 kernel: [ 260.117223] megaraid mbox: Wait for 1 commands to complete:300
Jan 31 14:42:03 kernel: [ 265.127417] megaraid mbox: Wait for 1 commands to complete:295
Jan 31 14:42:08 kernel: [ 270.140211] megaraid mbox: Wait for 1 commands to complete:290
Jan 31 14:42:12 kernel: [ 274.146803] megaraid mbox: reset sequence completed sucessfully

[ nothing else that appears relevant ]

Signature · 5 lines
Matthias Urlichs   |   {M:U} IT Design @ m-u-it.de   |  [email protected]
Disclaimer: The quote was selected randomly. Really. | http://smurf.noris.de
 - -
Those who welcome death have only tried it from the ears up.
					-- Wilson Mizner