Subject: Re: New spl level: splsched()
To: Eduardo E. Horvath <eeh@one-o.com>
From: Bill Sommerfeld <sommerfeld@orchard.east-arlington.ma.us>
List: tech-kern
Date: 03/06/1997 14:54:21
> #define mutex_init(m,s) (m).spl=(s)
>
> #define mutex_enter(m) (m).oldspl = splraise((m).spl)
> #define mutex_exit(m) splx((m).oldspl)
>
> You will need to replace all the spl stuff with this. Then you can
> start worrying about isolating critical sections that are not currently
> protected due to our single-threaded kernel design.
The problem with this implementation is that `oldspl' needs to be
stuffed in a temporary variable with a scope covering the lock/unlock,
not in a global variable..
i.e., it's currently legal to do:
x = splfoo();
y = splfoo();
splx(y);
splx(x);
Nesting your mutex_enter/mutex_exit, on the other hand, leave things
locked on exit...