khw@druil.UUCP (WilliamsonK) (07/16/85)
In clock.c in several versions of UN*X the code checks to see if the spl level was non-zero before the clock interrupt (i.e. we were already in an interrupt or a kernel critical section). If so it doesn't bother with the callout processing. My question is this: At the beginning of the callout processing it lowers the spl level so that the clock interrupt can be interrupted. But it doesn't raise the interrupt level at the end of the callout processing where the branches rejoin (at the label "out:"). This means that after "out:" is reached there are two possible spl levels: the original clock interrupt level, and the level set before doing the callout. If it is important that the code after "out:" not be interruptible, then the spl() level should be raised again for the case where it is lowered. If it is not important, then general principals about not keeping interrupts masked longer than absolutely necessary should dictate that the spl() level be lowered always after "out:". Is this an oversight on the part of the Un*x developers, or what am I missing? Karl Williamson ATT ISL Denver ihnp4!drutx!druil!khw 303-538-4583