Date: Fri, 16 Mar 2001 16:59:30 -0800 (PST) From: Matthew Jacob <mjacob@feral.com> To: Terry Lambert <tlambert@primenet.com> Cc: arch@FreeBSD.ORG Subject: man pages/more formal def enable_intr/disable_intr/restore_intr Message-ID: <Pine.LNX.4.21.0103161637510.773-100000@zeppo.feral.com> In-Reply-To: <200103170032.RAA20020@usr07.primenet.com>
index | next in thread | previous in thread | raw e-mail
Well, you put it marginally nicer than at least one other person.
I don't entirely agree with you- in particular of "how to use" because one
should try and be broad if you don't know the exact usage down the line, but
let's cut this short.
How's this...(paren comments in, duh, parentheses)
1. Formal Definition
disable_intr: Disables interrupts being dispatched to at least the calling
CPU. Returns an intrmask_t (should probably be an opaque type)
to be possibly used in a future call to restore_intr.
restore_intr: Restores the state prior to the call to disable_intr such that
the calling CPU now can have interrupts dispatched to it.
enable_intr: Irrespective of any prior state, enables interrupts to be
dispatched to the calling CPU.
(this narrows things down)
2. Where it might be used (generic)
The function disable_intr can and should be used when core platform code
wishes to not even allow for the possibility of interrupts to be dispatched to
a specific CPU.
The function restore_intr restores the state prior to the call to
disable_intr. Clearly it is symmetric to disable_intr.
The function enable_intr enables the dispatch of interrupts and you use it
when you have absolutely no idea whether interrupts are disabled or enabled
currently but you want them enabled.
3. How it might be used (an example)
It likely would be used (don't frickin nitpick on the details):
disable_intr: The very first line in machine dependent startup..
enable_intr: Just prior to calling interrupt driven configuration
during startup
disable_intr/restore_intr: callout from the kernel to PROM code (OBP, PAL)
I can think of a half dozen other places it might be used...
4. Suggested Implementations:
ia32: save_flags, cli/sti restore_flags (sorry- I only know linux usage here)
alpha: alpha_pal_swpipl(ALPHA_PSL_IPL_HIGH),
alpha_pal_swpipl(x)
alpha_pal_swpipl(ALPHA_PSL_IPL_0)
sparc:
mov %psr, %o0 | get current %psr
or %o0, PSR_PIL, %o0 ! spl8
mov %o0, %psr ! update psr
wr %o0, PSR_ET, %psr ! turn on traps (mask IU bug)
nop ! psr delay
nop ! psr delay
nop ! psr delay
retl ! return
nop ! nuthin to do in delay slot
...
Does this help? If not, just leave it noted that I'm not satisfying you and
we'll move on.
-matt
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.LNX.4.21.0103161637510.773-100000>
