summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2014-01-05 22:45:46 +0000
committermav <mav@FreeBSD.org>2014-01-05 22:45:46 +0000
commit116abbfd1f102c63111657f01cc3761565131f66 (patch)
tree66fbf4bebcd0fd90ef2877868cb25911518fa2d4
parent2ef8e6e39b77829132dba387adb1c4e19a04035b (diff)
downloadFreeBSD-src-116abbfd1f102c63111657f01cc3761565131f66.zip
FreeBSD-src-116abbfd1f102c63111657f01cc3761565131f66.tar.gz
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.
-rw-r--r--sys/dev/isp/isp_library.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/sys/dev/isp/isp_library.c b/sys/dev/isp/isp_library.c
index d5535f2..62c651c 100644
--- a/sys/dev/isp/isp_library.c
+++ b/sys/dev/isp/isp_library.c
@@ -322,9 +322,13 @@ isp_destroy_handle(ispsoftc_t *isp, uint32_t handle)
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));
}
OpenPOWER on IntegriCloud