Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 Jan 2014 22:45:46 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r260345 - stable/10/sys/dev/isp
Message-ID:  <201401052245.s05MjkCF015098@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Sun Jan  5 22:45:46 2014
New Revision: 260345
URL: http://svnweb.freebsd.org/changeset/base/260345

Log:
  MFC r257916:
  Save one more register read per command by not reading rqstoutrp register
  every time.  The purpose of that register is unlikely output queue overflow
  detection, so read it only when its last known (and probably stale now)
  value signals overflow.

Modified:
  stable/10/sys/dev/isp/isp_library.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/isp/isp_library.c
==============================================================================
--- stable/10/sys/dev/isp/isp_library.c	Sun Jan  5 22:43:40 2014	(r260344)
+++ stable/10/sys/dev/isp/isp_library.c	Sun Jan  5 22:45:46 2014	(r260345)
@@ -322,9 +322,13 @@ isp_destroy_handle(ispsoftc_t *isp, uint
 void *
 isp_getrqentry(ispsoftc_t *isp)
 {
-	isp->isp_reqodx = ISP_READ(isp, isp->isp_rqstoutrp);
-	if (ISP_NXT_QENTRY(isp->isp_reqidx, RQUEST_QUEUE_LEN(isp)) == isp->isp_reqodx) {
-		return (NULL);
+	uint32_t next;
+
+	next = ISP_NXT_QENTRY(isp->isp_reqidx, RQUEST_QUEUE_LEN(isp));
+	if (next == isp->isp_reqodx) {
+		isp->isp_reqodx = ISP_READ(isp, isp->isp_rqstoutrp);
+		if (next == isp->isp_reqodx)
+			return (NULL);
 	}
 	return (ISP_QUEUE_ENTRY(isp->isp_rquest, isp->isp_reqidx));
 }



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