Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Oct 2000 12:36:21 -0700 (PDT)
From:      Matthew Jacob <mjacob@feral.com>
To:        John Baldwin <jhb@FreeBSD.ORG>
Cc:        arch@FreeBSD.ORG, Jake Burkholder <jburkhol@home.com>
Subject:   Re: when is it safe to call msleep?
Message-ID:  <Pine.LNX.4.21.0010131230160.3882-100000@zeppo.feral.com>
In-Reply-To: <XFMail.001013111611.jhb@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help

Hmm... yes... now I don't know why I thought that the switch to SMP would
magically make all kernel services available during probetime... Sorry- I
didn't do my homework. I'm not going to even try the suggestion you made- we
still have all of the other stuff which needs to happen as well.

What I was trying do to was to eliminate the need for polling in Qlogic
driver. I have the mutex stuff ready to go, and didn't want to have to do any
runtime switching. Instead, I'll now have to do (below)... too bad- most of
the obnoxious time delay in booting with fibre channel has to do with dealing
with mailbox commands that take a very long time to die and tell you that the
fabric controller is dead. Zut.

The assumption is, as it has been, that the intr_config_hook has to run to let
me know that it's safe to use interrupt style mechanisms.

--------
static INLINE void isp_mbox_wait_complete(struct ispsoftc *);
static INLINE void
isp_mbox_wait_complete(struct ispsoftc *isp)
{
	if (isp_can_lock) {
		isp->isp_osinfo.mboxwaiting = 1;
#if	ISP_PLATFORM_VERSION_MAJOR > 5 || \
    (ISP_PLATFORM_VERSION_MAJOR == 5 && ISP_PLATFORM_VERSION_MINOR >= 4)
		(void) msleep(&isp->isp_osinfo.mboxwaiting,
		    &isp->isp_osinfo.lock, PRIBIO, "isp_mboxwaiting", 5 * hz);
#else
		(void) tsleep(&isp->isp_osinfo.mboxwaiting, PRIBIO,
		    "isp_mboxwaiting", 5 * hz);
#endif
		if (isp->isp_mboxbsy != 0) {
			isp_prt(isp, ISP_LOGWARN, "mailbox timeout");
			isp->isp_mboxbsy = 0;
		}
		isp->isp_osinfo.mboxwaiting = 0;
	} else {
		int j;
		for (j = 0; j < 60 * 2000; j++) {
			if (isp_intr(isp) == 0) {
				USEC_DELAY(500);
			}
			if (isp->isp_mboxbsy == 0) {
				break;
			}
		}
		if (isp->isp_mboxbsy != 0) {
			isp_prt(isp, ISP_LOGWARN, "mailbox timeout");
		}
	}
}
---------

-matt




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.LNX.4.21.0010131230160.3882-100000>