- Oct 14, 2008
- Oct 12, 2008
- Oct 08, 2008
-
-
rtm authored
-
- Sep 28, 2008
-
-
rtm authored
-
- Sep 24, 2008
-
-
kolya authored
-
- Sep 23, 2008
-
-
kolya authored
accessible to user from the hidden CPU segment registers.
-
- Sep 11, 2008
- Sep 09, 2008
-
-
kaashoek authored
-
- Sep 03, 2008
- Sep 02, 2008
-
-
rsc authored
-
- Aug 28, 2008
-
-
rtm authored
-
- Aug 27, 2008
- Aug 21, 2008
- Aug 20, 2008
- Dec 20, 2007
-
-
rsc authored
-
- Nov 28, 2007
- Oct 20, 2007
-
-
rtm authored
-
- Oct 11, 2007
-
-
rsc authored
Model verifying that wakeup really can be called after release without causing deadlock.
-
- Oct 01, 2007
-
-
rsc authored
Incorporate new understanding of/with Intel SMP spec. Dropped cmpxchg in favor of xchg, to match lecture notes. Use xchg to release lock, for future protection and to keep gcc from acting clever.
-
- Sep 30, 2007
-
-
rsc authored
Re: why cpuid() in locking code? rtm wrote: > Why does acquire() call cpuid()? Why does release() call cpuid()? The cpuid in acquire is redundant with the cmpxchg, as you said. I have removed the cpuid from acquire. The cpuid in release is actually doing something important, but not on the hardware. It keeps gcc from reordering the lock->locked assignment above the other two during optimization. (Not that current gcc -O2 would choose to do that, but it is allowed to.) I have replaced the cpuid in release with a "gcc barrier" that keeps gcc from moving things around but has no hardware effect. On a related note, I don't think the cpuid in mpmain is necessary, for the same reason that the cpuid wasn't needed in release. As to the question of whether acquire(); x = protected; release(); might read protected after release(), I still haven't convinced myself whether it can. I'll put the cpuid back into release if we determine that it can. Russ
-
rsc authored
-
- Sep 27, 2007
-
-
rsc authored
interrupts during system calls "It just works."
-
rsc authored
Final word on the locking fiasco? Change pushcli / popcli so that they can never turn on interrupts unexpectedly. That is, if interrupts are on, then pushcli(); popcli(); turns them off and back on, but if they are off to begin with, then pushcli(); popcli(); is a no-op. I think our fundamental mistake was having a primitive (release and then popcli nee spllo) that could turn interrupts on at unexpected moments instead of being explicit about when we want to start allowing interrupts. With the new semantics, all the manual fiddling of ncli to force interrupts off in certain sections goes away. In return, we must explicitly mark the places where we want to enable interrupts unconditionally, by calling sti(). There is only one: inside the scheduler loop.
-
rsc authored
-