Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 25 Oct 2015 14:34:08 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r289933 - head/sys/dev/isp
Message-ID:  <201510251434.t9PEY8Sf075976@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Sun Oct 25 14:34:07 2015
New Revision: 289933
URL: https://svnweb.freebsd.org/changeset/base/289933

Log:
  Improve Port Database Changed handling and reporting.

Modified:
  head/sys/dev/isp/isp.c
  head/sys/dev/isp/isp_freebsd.c

Modified: head/sys/dev/isp/isp.c
==============================================================================
--- head/sys/dev/isp/isp.c	Sun Oct 25 13:14:53 2015	(r289932)
+++ head/sys/dev/isp/isp.c	Sun Oct 25 14:34:07 2015	(r289933)
@@ -6074,21 +6074,22 @@ isp_parse_async_fc(ispsoftc_t *isp, uint
 
 	case ASYNC_PDB_CHANGED:
 	{
-		int nphdl, nlstate, reason;
-		/*
-		 * We *should* get a channel out of the 24XX, but we don't seem
-		 * to get more than a PDB CHANGED on channel 0, so turn it into
-		 * a broadcast event.
-		 */
+		int echan, nphdl, nlstate, reason;
+
 		if (IS_24XX(isp)) {
 			nphdl = ISP_READ(isp, OUTMAILBOX1);
 			nlstate = ISP_READ(isp, OUTMAILBOX2);
-			reason = ISP_READ(isp, OUTMAILBOX3) >> 8;
+			reason = ISP_READ(isp, OUTMAILBOX3);
+			chan = reason & 0xff;
+			echan = (nphdl == NIL_HANDLE) ?
+			    isp->isp_nchan - 1 : chan;
+			reason = reason >> 8;
 		} else {
 			nphdl = NIL_HANDLE;
 			nlstate = reason = 0;
+			chan = echan = 0;
 		}
-		for (chan = 0; chan < isp->isp_nchan; chan++) {
+		for (; chan <= echan; chan++) {
 			fcparam *fcp = FCPARAM(isp, chan);
 
 			if (fcp->role == ISP_ROLE_NONE) {

Modified: head/sys/dev/isp/isp_freebsd.c
==============================================================================
--- head/sys/dev/isp/isp_freebsd.c	Sun Oct 25 13:14:53 2015	(r289932)
+++ head/sys/dev/isp/isp_freebsd.c	Sun Oct 25 14:34:07 2015	(r289933)
@@ -382,14 +382,16 @@ isp_freeze_loopdown(ispsoftc_t *isp, int
 	if (IS_FC(isp)) {
 		struct isp_fc *fc = ISP_FC_PC(isp, chan);
 		if (fc->simqfrozen == 0) {
-			isp_prt(isp, ISP_LOGDEBUG0, "%s: freeze simq (loopdown) chan %d", msg, chan);
+			isp_prt(isp, ISP_LOGDEBUG0,
+			    "Chan %d %s -- freeze simq (loopdown)", chan, msg);
 			fc->simqfrozen = SIMQFRZ_LOOPDOWN;
 #if __FreeBSD_version >= 1000039
 			xpt_hold_boot();
 #endif
 			xpt_freeze_simq(fc->sim, 1);
 		} else {
-			isp_prt(isp, ISP_LOGDEBUG0, "%s: mark frozen (loopdown) chan %d", msg, chan);
+			isp_prt(isp, ISP_LOGDEBUG0,
+			    "Chan %d %s -- mark frozen (loopdown)", chan, msg);
 			fc->simqfrozen |= SIMQFRZ_LOOPDOWN;
 		}
 	}
@@ -4988,11 +4990,11 @@ changed:
 		fc = ISP_FC_PC(isp, bus);
 
 		if (evt == ISPASYNC_CHANGE_PDB) {
-			msg = "Chan %d Port Database Changed";
+			msg = "Port Database Changed";
 		} else if (evt == ISPASYNC_CHANGE_SNS) {
-			msg = "Chan %d Name Server Database Changed";
+			msg = "Name Server Database Changed";
 		} else {
-			msg = "Chan %d Other Change Notify";
+			msg = "Other Change Notify";
 		}
 
 		/*
@@ -5002,7 +5004,7 @@ changed:
 			isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Stopping Loop Down Timer @ %lu", (unsigned long) time_uptime);
 			callout_stop(&fc->ldt);
 		}
-		isp_prt(isp, ISP_LOGINFO, msg, bus);
+		isp_prt(isp, ISP_LOGINFO, "Chan %d %s", bus, msg);
 		if (FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) {
 			isp_freeze_loopdown(isp, bus, msg);
 		}



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