Subject: gmcgarry_ctxsw problems
To: None <tech-kern@netbsd.org>
From: Jason R Thorpe <thorpej@wasabisystems.com>
List: tech-kern
Date: 01/02/2003 13:37:22
I've been looking at Greg's new context switch code on the above-mentioned
branch, and have identified some problems with it:
1. sched_lock is released too early. Specifically, it is released
before having completely switched away from the outgoing proc.
This is a race condition that will break MP systems (and has
in the past, until cpu_switch() was fixed on i386 and alpha).
2. It does not properly handle switching to an idle context. On
UP systems, this means proc0's PCB. On MP systems, this means
the CPU's idle PCB. On the VAX, this means the CPU's interrupt
stack.
3. It doesn't not have any way to communicate the info that can
currently be passed between cpu_switch() and idle(). For the
most part, that means "remembering if we're switching to the
same process again" -- this is more complicated in MP systems.
For this reason, I think the approach taken by Greg's new code needs
to be reexamined. I think probably a better way to handle it is for
cpu_switch() to actually call an MI C function to get the new process
to switch to. That is, leave it mostly the same as it is now, just
replace the code that looks at the run queues with a function call.
--
-- Jason R. Thorpe <thorpej@wasabisystems.com>