From d08b7ab68bb5f2084f86e1004746c13fa9712489 Mon Sep 17 00:00:00 2001 From: mjacob Date: Tue, 5 Dec 2000 07:41:53 +0000 Subject: Only call ISP_UNLOCK/ISP_LOCK if isp->isp_osinfo.intsok in USEC_SLEEP. Add a test against isp->isp_osinfo.islocked prior to trying to see whether --isp->isp_osinfo.islocked is zero to cause us to unlock (non-SMPLOCK case). --- sys/dev/isp/isp_freebsd.h | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'sys/dev/isp/isp_freebsd.h') diff --git a/sys/dev/isp/isp_freebsd.h b/sys/dev/isp/isp_freebsd.h index 3425460..5f9f47f 100644 --- a/sys/dev/isp/isp_freebsd.h +++ b/sys/dev/isp/isp_freebsd.h @@ -146,10 +146,12 @@ struct isposinfo { #define SNPRINTF snprintf #define STRNCAT strncat #define USEC_DELAY DELAY -#define USEC_SLEEP(isp, x) \ - ISP_UNLOCK(isp); \ - DELAY(x); \ - ISP_LOCK(isp) +#define USEC_SLEEP(isp, x) \ + if (isp->isp_osinfo.intsok) \ + ISP_UNLOCK(isp); \ + DELAY(x); \ + if (isp->isp_osinfo.intsok) \ + ISP_LOCK(isp) #define NANOTIME_T struct timespec #define GET_NANOTIME nanotime @@ -332,8 +334,10 @@ static INLINE void isp_unlock(struct ispsoftc *); static INLINE void isp_unlock(struct ispsoftc *isp) { - if (--isp->isp_osinfo.islocked == 0) { - splx(isp->isp_osinfo.splsaved); + if (isp->isp_osinfo.islocked) { + if (--isp->isp_osinfo.islocked == 0) { + splx(isp->isp_osinfo.splsaved); + } } } #endif -- cgit v1.1