Date: Fri, 16 Mar 2001 11:38:01 -0800 (PST) From: John Baldwin <jhb@FreeBSD.org> To: Bruce Evans <bde@zeta.org.au> Cc: arch@FreeBSD.org Subject: Re: Proposal for the CPU interrupt API Message-ID: <XFMail.010316113801.jhb@FreeBSD.org> In-Reply-To: <Pine.BSF.4.21.0103162110020.12084-100000@besplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 16-Mar-01 Bruce Evans wrote: > On Thu, 15 Mar 2001, John Baldwin wrote: > >> ... >> Typically, interrupts are disabled in the following fashion: >> >> u_int foo = save_intr(); >> disable_intr(); >> ... >> restore_intr(foo); >> >> Unfortunately, this can be somewhat expensive on the Alpha, as both >> save_intr() and disable_intr() involve a PAL call. However, the Alpha >> returns the previous state whenever you set the interrupt state, which >> allows you to only make 1 PAL call. Thus, I'm proposing to change >> disable/enable_intr to return the previous state in addition to setting >> the state. > > This would be a minor pessimization on i386's. WHether it is an optimization > or a pessimization is very MD. It would be a major pessimization on i386's > with ICUs if we put the entire interrupt state including the ICU masks in > the interrrupt state. I don't think this needs to go near the ICU state, but yes, it is a minor pessimization on i386. >> This then removes the need for save_intr(), and >> restore_intr() can stay the same. > > This doesn't remove the need for save_intr(). I use it in at least one > place (perhaps only one :-) where I don't want to disable interrupts any > more than they already are. If it is just the CPU status, then just intr_disable() (or disable_intr()) will accomplish this. >> Finally, another suggestion has been to fudge the names some to stick >> all of these functions in one intr_* namespace. >> >> The end result of these changes would be this: >> >> intrmask_t intr_disable(void); >> intrmask_t intr_enable(void); >> void intr_restore(intrmask_t); > > I don't like names like this much. I don't care too strongly about the names either way. But it seems to me that foo_* namespaces are easier to enforce than *_foo namespaces. > It's really a mistake to let this stuff escape from MD code. Frotunately, > it hasn't escaped far yet. The only somewhat MI place it is used is in the bowels of the mutex code. Any MI code that wishes to prevent preemption should use a spinlock instead of disabling interrupts manually now. > Bruce -- John Baldwin <jhb@FreeBSD.org> -- http://www.FreeBSD.org/~jhb/ PGP Key: http://www.baldwin.cx/~john/pgpkey.asc "Power Users Use the Power to Serve!" - http://www.FreeBSD.org/ 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?XFMail.010316113801.jhb>