<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">
From: "Moore, Eric Dean" &lt;Eric.Moore@lsil.com&gt;

I have created a patch with only domain validation fixes made against
2.6.13-rc2 plus James scsi-misc-2.6.diff from about a week ago.

In dv we do reserve/release, around the issuing of read/write buffer
patterns.  The release is failing for some reason on id=1.  Perhaps you
could apply the patch and let me know if it is still occurring.  Or perhaps
you could enable the MPT_DEBUG_DV define in the Makefile and recompile. 
Then send me the dmesg.

On Wednesday, July 27, 2005 12:24 AM, Andrew Morton wrote:
&gt; 
&gt; I got this while booting my ia64 box.  Running the latest of 
&gt; everything. 
&gt; Does it matter?
&gt; 
&gt; 
&gt; mptbase: Initiating ioc0 bringup
&gt; ioc0: 53C1030: Capabilities={Initiator}
&gt; scsi0 : ioc0: LSI53C1030, FwRev=01030a00h, Ports=1, MaxQ=255, IRQ=49
&gt;   Vendor: MAXTOR    Model: ATLASU320_18_SCA  Rev: B120
&gt;   Type:   Direct-Access                      ANSI SCSI revision: 03
&gt; SCSI device sda: 35916548 512-byte hdwr sectors (18389 MB)
&gt; SCSI device sda: drive cache: write back
&gt; SCSI device sda: 35916548 512-byte hdwr sectors (18389 MB)
&gt; SCSI device sda: drive cache: write back
&gt;  sda: sda1 sda2 sda3
&gt; Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
&gt;   Vendor: QUANTUM   Model: ATLAS IV 9 SCA    Rev: 0909
&gt;   Type:   Direct-Access                      ANSI SCSI revision: 03
&gt; SCSI device sdb: 17942584 512-byte hdwr sectors (9187 MB)
&gt; SCSI device sdb: drive cache: write back
&gt; SCSI device sdb: 17942584 512-byte hdwr sectors (9187 MB)
&gt; SCSI device sdb: drive cache: write back
&gt;  sdb: sdb1
&gt; Attached scsi disk sdb at scsi0, channel 0, id 1, lun 0
&gt;   Vendor: QUANTUM   Model: ATLAS IV 9 SCA    Rev: 0B0B
&gt;   Type:   Direct-Access                      ANSI SCSI revision: 03
&gt; SCSI device sdc: 17942584 512-byte hdwr sectors (9187 MB)
&gt; SCSI device sdc: drive cache: write back
&gt; SCSI device sdc: 17942584 512-byte hdwr sectors (9187 MB)
&gt; SCSI device sdc: drive cache: write back
&gt;  sdc: unknown partition table
&gt; Attached scsi disk sdc at scsi0, channel 0, id 2, lun 0
&gt;   Vendor: ESG-SHV   Model: SCA HSBP M17      Rev: 0101
&gt;   Type:   Processor                          ANSI SCSI revision: 02
&gt; GSI 29 (level, low) -&gt; CPU 2 (0xc418) vector 50
&gt; ACPI: PCI Interrupt 0000:06:02.1[B] -&gt; GSI 29 (level, low) -&gt; IRQ 50
&gt; mptbase: Initiating ioc1 bringup
&gt; mptscsih: ioc0: DV: Release failed. id 1&lt;6&gt;ioc1: 53C1030: 
&gt; Capabilities={Initiator}
&gt; scsi1 : ioc1: LSI53C1030, FwRev=01030a00h, Ports=1, MaxQ=255, IRQ=50
&gt; Calling initcall 0xa0000001007e5ed0: mptfc_init+0x0/0x140()
&gt; Fusion MPT FC Host driver 3.03.02
&gt; Calling initcall 0xa0000001007e1f00: mptctl_init+0x0/0x1e0()
&gt; Fusion MPT misc device (ioctl) driver 3.03.02
&gt; mptctl: Registered with Fusion MPT base driver
&gt; mptctl: /dev/mptctl @ (major,minor=10,220)
&gt; 

Cc: James Bottomley &lt;James.Bottomley@steeleye.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@osdl.org&gt;
---

 drivers/message/fusion/mptscsih.c |   59 +++++++++++++++++++++++---------------
 1 files changed, 36 insertions(+), 23 deletions(-)

diff -puN drivers/message/fusion/mptscsih.c~mpt-fusion-dv-fixes drivers/message/fusion/mptscsih.c
--- devel/drivers/message/fusion/mptscsih.c~mpt-fusion-dv-fixes	2005-07-27 17:34:06.000000000 -0700
+++ devel-akpm/drivers/message/fusion/mptscsih.c	2005-07-27 17:34:06.000000000 -0700
@@ -93,8 +93,9 @@ typedef struct _BIG_SENSE_BUF {
 
 #define MPT_ICFLAG_BUF_CAP	0x01	/* ReadBuffer Read Capacity format */
 #define MPT_ICFLAG_ECHO		0x02	/* ReadBuffer Echo buffer format */
-#define MPT_ICFLAG_PHYS_DISK	0x04	/* Any SCSI IO but do Phys Disk Format */
-#define MPT_ICFLAG_TAGGED_CMD	0x08	/* Do tagged IO */
+#define MPT_ICFLAG_EBOS		0x04	/* ReadBuffer Echo buffer has EBOS */
+#define MPT_ICFLAG_PHYS_DISK	0x08	/* Any SCSI IO but do Phys Disk Format */
+#define MPT_ICFLAG_TAGGED_CMD	0x10	/* Do tagged IO */
 #define MPT_ICFLAG_DID_RESET	0x20	/* Bus Reset occurred with this command */
 #define MPT_ICFLAG_RESERVED	0x40	/* Reserved has been issued */
 
@@ -1418,6 +1419,7 @@ mptscsih_qcmd(struct scsi_cmnd *SCpnt, v
 	return 0;
 
  fail:
+	hd-&gt;ScsiLookup[my_idx] = NULL;
 	mptscsih_freeChainBuffers(hd-&gt;ioc, my_idx);
 	mpt_free_msg_frame(hd-&gt;ioc, mf);
 	return SCSI_MLQUEUE_HOST_BUSY;
@@ -3085,7 +3087,7 @@ mptscsih_writeSDP1(MPT_SCSI_HOST *hd, in
 	MPT_ADAPTER		*ioc = hd-&gt;ioc;
 	Config_t		*pReq;
 	SCSIDevicePage1_t	*pData;
-	VirtDevice		*pTarget;
+	VirtDevice		*pTarget=NULL;
 	MPT_FRAME_HDR		*mf;
 	dma_addr_t		 dataDma;
 	u16			 req_idx;
@@ -3169,7 +3171,7 @@ mptscsih_writeSDP1(MPT_SCSI_HOST *hd, in
 			width = pTarget-&gt;maxWidth;
 			factor = pTarget-&gt;minSyncFactor;
 			offset = pTarget-&gt;maxOffset;
-			negoFlags = pTarget-&gt;negoFlags;
+			negoFlags |= pTarget-&gt;negoFlags;
 		}
 
 #ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION
@@ -3184,7 +3186,7 @@ mptscsih_writeSDP1(MPT_SCSI_HOST *hd, in
 #endif
 
 		if (flags &amp; MPT_SCSICFG_BLK_NEGO)
-			negoFlags = MPT_TARGET_NO_NEGO_WIDE | MPT_TARGET_NO_NEGO_SYNC;
+			negoFlags |= MPT_TARGET_NO_NEGO_WIDE | MPT_TARGET_NO_NEGO_SYNC;
 
 		mptscsih_setDevicePage1Flags(width, factor, offset,
 					&amp;requested, &amp;configuration, negoFlags);
@@ -3194,8 +3196,8 @@ mptscsih_writeSDP1(MPT_SCSI_HOST *hd, in
 		/* Get a MF for this command.
 		 */
 		if ((mf = mpt_get_msg_frame(ioc-&gt;DoneCtx, ioc)) == NULL) {
-			dprintk((MYIOC_s_WARN_FMT "write SDP1: no msg frames!\n",
-						ioc-&gt;name));
+			dfailprintk((MYIOC_s_WARN_FMT "write SDP1: no msg frames!\n",
+				ioc-&gt;name));
 			return -EAGAIN;
 		}
 
@@ -3289,7 +3291,7 @@ mptscsih_writeIOCPage4(MPT_SCSI_HOST *hd
 	/* Get a MF for this command.
 	 */
 	if ((mf = mpt_get_msg_frame(ioc-&gt;DoneCtx, ioc)) == NULL) {
-		dprintk((MYIOC_s_WARN_FMT "writeIOCPage4 : no msg frames!\n",
+		dfailprintk((MYIOC_s_WARN_FMT "writeIOCPage4 : no msg frames!\n",
 					ioc-&gt;name));
 		return -EAGAIN;
 	}
@@ -4711,8 +4713,13 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus
 	if (inq0 != 0)
 		goto target_done;
 
-	if ( ioc-&gt;spi_data.PortFlags == MPI_SCSIPORTPAGE2_PORT_FLAGS_BASIC_DV_ONLY )
+	ddvprintk((MYIOC_s_NOTE_FMT "DV: bus, id, lun (%d, %d, %d) PortFlags=%x\n",
+			ioc-&gt;name, bus, id, lun, ioc-&gt;spi_data.PortFlags));
+	if ( ioc-&gt;spi_data.PortFlags == MPI_SCSIPORTPAGE2_PORT_FLAGS_BASIC_DV_ONLY ) {
+		ddvprintk((MYIOC_s_NOTE_FMT "DV Basic Only: bus, id, lun (%d, %d, %d) PortFlags=%x\n",
+			ioc-&gt;name, bus, id, lun, ioc-&gt;spi_data.PortFlags));
 		goto target_done;
+	}
 
 	/* Start the Enhanced Test.
 	 * 0) issue TUR to clear out check conditions
@@ -4809,6 +4816,8 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus
 					notDone = 0;
 					if (iocmd.flags &amp; MPT_ICFLAG_ECHO) {
 						bufsize =  ((pbuf1[2] &amp; 0x1F) &lt;&lt;8) | pbuf1[3];
+						if (pbuf1[0] &amp; 0x01)
+							iocmd.flags |= MPT_ICFLAG_EBOS;
 					} else {
 						bufsize =  pbuf1[1]&lt;&lt;16 | pbuf1[2]&lt;&lt;8 | pbuf1[3];
 					}
@@ -4905,6 +4914,9 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus
 		}
 		iocmd.flags &amp;= ~MPT_ICFLAG_DID_RESET;
 
+		if (iocmd.flags &amp; MPT_ICFLAG_EBOS)
+			goto skip_Reserve;
+
 		repeat = 5;
 		while (repeat &amp;&amp; (!(iocmd.flags &amp; MPT_ICFLAG_RESERVED))) {
 			iocmd.cmd = RESERVE;
@@ -4948,6 +4960,7 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus
 			}
 		}
 
+skip_Reserve:
 		mptscsih_fillbuf(pbuf1, sz, patt, 1);
 		iocmd.cmd = WRITE_BUFFER;
 		iocmd.data_dma = buf1_dma;
@@ -5192,11 +5205,12 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVP
 		 * If not an LVD bus, the adapter minSyncFactor has been
 		 * already throttled back.
 		 */
+		negoFlags = hd-&gt;ioc-&gt;spi_data.noQas;
 		if ((hd-&gt;Targets)&amp;&amp;((pTarget = hd-&gt;Targets[(int)id]) != NULL) &amp;&amp; !pTarget-&gt;raidVolume) {
 			width = pTarget-&gt;maxWidth;
 			offset = pTarget-&gt;maxOffset;
 			factor = pTarget-&gt;minSyncFactor;
-			negoFlags = pTarget-&gt;negoFlags;
+			negoFlags |= pTarget-&gt;negoFlags;
 		} else {
 			if (hd-&gt;ioc-&gt;spi_data.nvram &amp;&amp; (hd-&gt;ioc-&gt;spi_data.nvram[id] != MPT_HOST_NVRAM_INVALID)) {
 				data = hd-&gt;ioc-&gt;spi_data.nvram[id];
@@ -5217,7 +5231,6 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVP
 			}
 
 			/* Set the negotiation flags */
-			negoFlags = hd-&gt;ioc-&gt;spi_data.noQas;
 			if (!width)
 				negoFlags |= MPT_TARGET_NO_NEGO_WIDE;
 
@@ -5238,7 +5251,7 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVP
 		dv-&gt;max.offset = offset;
 		dv-&gt;max.factor = factor;
 		dv-&gt;max.flags = negoFlags;
-		ddvprintk((" id=%d width=%d factor=%x offset=%x flags=%x\n",
+		ddvprintk((" id=%d width=%d factor=%x offset=%x negoFlags=%x\n",
 				id, width, factor, offset, negoFlags));
 		break;
 
@@ -5248,7 +5261,7 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVP
 		/* Update tmax values with those from Device Page 0.*/
 		pPage0 = (SCSIDevicePage0_t *) pPage;
 		if (pPage0) {
-			val = cpu_to_le32(pPage0-&gt;NegotiatedParameters);
+			val = le32_to_cpu(pPage0-&gt;NegotiatedParameters);
 			dv-&gt;max.width = val &amp; MPI_SCSIDEVPAGE0_NP_WIDE ? 1 : 0;
 			dv-&gt;max.offset = (val&amp;MPI_SCSIDEVPAGE0_NP_NEG_SYNC_OFFSET_MASK) &gt;&gt; 16;
 			dv-&gt;max.factor = (val&amp;MPI_SCSIDEVPAGE0_NP_NEG_SYNC_PERIOD_MASK) &gt;&gt; 8;
@@ -5257,7 +5270,7 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVP
 		dv-&gt;now.width = dv-&gt;max.width;
 		dv-&gt;now.offset = dv-&gt;max.offset;
 		dv-&gt;now.factor = dv-&gt;max.factor;
-		ddvprintk(("id=%d width=%d factor=%x offset=%x flags=%x\n",
+		ddvprintk(("id=%d width=%d factor=%x offset=%x negoFlags=%x\n",
 				id, dv-&gt;now.width, dv-&gt;now.factor, dv-&gt;now.offset, dv-&gt;now.flags));
 		break;
 
@@ -5276,12 +5289,12 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVP
 				dv-&gt;now.offset, &amp;val, &amp;configuration, dv-&gt;now.flags);
 			dnegoprintk(("Setting Max: id=%d width=%d factor=%x offset=%x negoFlags=%x request=%x config=%x\n",
 				id, dv-&gt;now.width, dv-&gt;now.factor, dv-&gt;now.offset, dv-&gt;now.flags, val, configuration));
-			pPage1-&gt;RequestedParameters = le32_to_cpu(val);
+			pPage1-&gt;RequestedParameters = cpu_to_le32(val);
 			pPage1-&gt;Reserved = 0;
-			pPage1-&gt;Configuration = le32_to_cpu(configuration);
+			pPage1-&gt;Configuration = cpu_to_le32(configuration);
 		}
 
-		ddvprintk(("id=%d width=%d factor=%x offset=%x flags=%x request=%x configuration=%x\n",
+		ddvprintk(("id=%d width=%d factor=%x offset=%x negoFlags=%x request=%x configuration=%x\n",
 				id, dv-&gt;now.width, dv-&gt;now.factor, dv-&gt;now.offset, dv-&gt;now.flags, val, configuration));
 		break;
 
@@ -5301,9 +5314,9 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVP
 				offset, &amp;val, &amp;configuration, negoFlags);
 			dnegoprintk(("Setting Min: id=%d width=%d factor=%x offset=%x negoFlags=%x request=%x config=%x\n",
 				id, width, factor, offset, negoFlags, val, configuration));
-			pPage1-&gt;RequestedParameters = le32_to_cpu(val);
+			pPage1-&gt;RequestedParameters = cpu_to_le32(val);
 			pPage1-&gt;Reserved = 0;
-			pPage1-&gt;Configuration = le32_to_cpu(configuration);
+			pPage1-&gt;Configuration = cpu_to_le32(configuration);
 		}
 		ddvprintk(("id=%d width=%d factor=%x offset=%x request=%x config=%x negoFlags=%x\n",
 				id, width, factor, offset, val, configuration, negoFlags));
@@ -5377,12 +5390,12 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVP
 		if (pPage1) {
 			mptscsih_setDevicePage1Flags (width, factor, offset, &amp;val,
 						&amp;configuration, dv-&gt;now.flags);
-			dnegoprintk(("Finish: id=%d width=%d offset=%d factor=%x flags=%x request=%x config=%x\n",
+			dnegoprintk(("Finish: id=%d width=%d offset=%d factor=%x negoFlags=%x request=%x config=%x\n",
 			     id, width, offset, factor, dv-&gt;now.flags, val, configuration));
 
-			pPage1-&gt;RequestedParameters = le32_to_cpu(val);
+			pPage1-&gt;RequestedParameters = cpu_to_le32(val);
 			pPage1-&gt;Reserved = 0;
-			pPage1-&gt;Configuration = le32_to_cpu(configuration);
+			pPage1-&gt;Configuration = cpu_to_le32(configuration);
 		}
 
 		ddvprintk(("Finish: id=%d offset=%d factor=%x width=%d request=%x config=%x\n",
@@ -5392,7 +5405,7 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVP
 	case MPT_SAVE:
 		ddvprintk((MYIOC_s_NOTE_FMT
 			"Saving to Target structure: ", hd-&gt;ioc-&gt;name));
-		ddvprintk(("id=%d width=%x factor=%x offset=%d flags=%x\n",
+		ddvprintk(("id=%d width=%x factor=%x offset=%d negoFlags=%x\n",
 			     id, dv-&gt;now.width, dv-&gt;now.factor, dv-&gt;now.offset, dv-&gt;now.flags));
 
 		/* Save these values to target structures
_
</pre></body></html>