Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 19 Oct 2006 16:16:31 GMT
From:      Matt Jacob <mjacob@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 108100 for review
Message-ID:  <200610191616.k9JGGVPf055873@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=108100

Change 108100 by mjacob@newisp on 2006/10/19 16:15:44

	So, make sure we actually *do* retry the isp_update operation
	if the mailbox command fails.

Affected files ...

.. //depot/projects/newisp/dev/isp/isp.c#19 edit

Differences ...

==== //depot/projects/newisp/dev/isp/isp.c#19 (text+ko) ====

@@ -3992,7 +3992,6 @@
 		target = fcp->portdb[i - 1].handle;
 	}
 
-#if	0
 	/*
 	 * Next check to see if any HBA or Device parameters need to be updated.
 	 */
@@ -4000,8 +3999,6 @@
 		isp_update(isp);
 	}
 
-#endif
-
  start_again:
 
 	if (isp_getrqentry(isp, &nxti, &optr, (void *)&qep)) {
@@ -6800,17 +6797,16 @@
 		 */
 		if (sdp->isp_devparam[tgt].dev_refresh) {
 			mbs.param[0] = MBOX_GET_TARGET_PARAMS;
-			sdp->isp_devparam[tgt].dev_refresh = 0;
 			get = 1;
 		} else if (sdp->isp_devparam[tgt].dev_update) {
 			mbs.param[0] = MBOX_SET_TARGET_PARAMS;
+
 			/*
 			 * Make sure goal_flags has "Renegotiate on Error"
 			 * on and "Freeze Queue on Error" off.
 			 */
 			sdp->isp_devparam[tgt].goal_flags |= DPARM_RENEG;
 			sdp->isp_devparam[tgt].goal_flags &= ~DPARM_QFRZ;
-
 			mbs.param[2] = sdp->isp_devparam[tgt].goal_flags;
 
 			/*
@@ -6844,8 +6840,6 @@
 			    "bus %d set tgt %d flags 0x%x off 0x%x period 0x%x",
 			    bus, tgt, mbs.param[2], mbs.param[3] >> 8,
 			    mbs.param[3] & 0xff);
-			sdp->isp_devparam[tgt].dev_update = 0;
-			sdp->isp_devparam[tgt].dev_refresh = 1;
 			get = 0;
 		} else {
 			continue;
@@ -6853,18 +6847,24 @@
 		mbs.param[1] = (bus << 15) | (tgt << 8);
 		mbs.logval = MBLOGALL;
 		isp_mboxcmd(isp, &mbs);
+		if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
+			continue;
+		}
 		if (get == 0) {
 			isp->isp_sendmarker |= (1 << bus);
-			continue;
+			sdp->isp_devparam[tgt].dev_update = 0;
+			sdp->isp_devparam[tgt].dev_refresh = 1;
+		} else {
+			sdp->isp_devparam[tgt].dev_refresh = 0;
+			flags = mbs.param[2];
+			period = mbs.param[3] & 0xff;
+			offset = mbs.param[3] >> 8;
+			sdp->isp_devparam[tgt].actv_flags = flags;
+			sdp->isp_devparam[tgt].actv_period = period;
+			sdp->isp_devparam[tgt].actv_offset = offset;
+			get = (bus << 16) | tgt;
+			(void) isp_async(isp, ISPASYNC_NEW_TGT_PARAMS, &get);
 		}
-		flags = mbs.param[2];
-		period = mbs.param[3] & 0xff;
-		offset = mbs.param[3] >> 8;
-		sdp->isp_devparam[tgt].actv_flags = flags;
-		sdp->isp_devparam[tgt].actv_period = period;
-		sdp->isp_devparam[tgt].actv_offset = offset;
-		get = (bus << 16) | tgt;
-		(void) isp_async(isp, ISPASYNC_NEW_TGT_PARAMS, &get);
 	}
 
 	for (tgt = 0; tgt < MAX_TARGETS; tgt++) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200610191616.k9JGGVPf055873>