Subject: Re: device driver docs / interrupts
To: None <current-users@NetBSD.ORG>
From: David Jones <dej@eecg.toronto.edu>
List: current-users
Date: 02/22/1995 17:31:05
> Could some kind soul (perhaps he who claimed to be working on a
> device driver doc) email me some generals about disabling/enabling
> interrupts? specifically: is it always best to use splXXX() or
> are there other forms like "disable_intr()" (used in isa/cy.c) which
> are better under some circumstances?
AFAIK, the ONLY universally-supported way to deal with interrupts is spl*().
> how atomic are assignments? can "a = 0" be interrupted? how about
> cp = p -> foo?
Depends on CPU and compiler.
Assuming ints, a=0 is interruptible if you are writing a longword on a non-long
boundary, and page fault when doing the second part. Not likely in a
device driver.
cp=p->foo is definitely interruptible on a lot of machines:
load p(FP),r0
load foo(r0),cp
Any 2-instruction sequence is interruptible.
To be safe, assume NOTHING atomic.
We are going multiprocessor soon, no? :-)
> In the com.c driver, fairly sweeping segments of code are enclosed in
> spltty()/splx(); was this a quick and dirty thing, or a reasonable use?
Probably reasonable, if you consider the high-level architecture of Unix
device drivers reasonable.