[TUHS] re: Raise of interrupt level necessary
dmr at plan9.bell-labs.com
Fri Dec 13 16:04:29 AEST 2002
Wolfgang Helbig wondered,
> While studying the V6 kernel, I search for some rules as when to raise
> the interrupt priority level (IPL). I came up with something like this:
> A kernel process needs to raise the IPL if a change of data must be atomic and might
> be accessed (not necessarily changed) by an IRS.
> In light of this rule, some raising of interrupts seem unnecessary:
> - In m40.s changes of the user space segmentation registers are bracketed by raising
> and lowering the IPL, although these registers are never accessed by an ISR.
> - Likewise, in m40.s, just before the trap routine checks the runrun flag and
> restores r0, r1 and the user stackpointer, it raises the IPL. I can't see what
> possibly should go wrong, if being interrupted while restoring the values.
It's quite possible that the code is unnecessarily cautious.
In general one does not want an interrupt while something
sensitive is in a half-changed state (for example, some of
the addressing registers changed, or a stack half-switched).
For example, the clock interrupt routine can inspect user
space (for display(), for example, though this is inactive
on the 11/40), and even change it (for profiling).
It does appear that other things (checking for
a direct-from user-mode interrupt) in the clock routine
already guard against these particular problems.
It's been a long time since I've looked at this, however.
More information about the TUHS