- Sep 01, 2011
-
-
Frans Kaashoek authored
-
- Aug 30, 2011
-
-
Robert Morris authored
-
- Aug 29, 2011
-
-
Austin Clements authored
-
- Aug 22, 2011
-
-
Frans Kaashoek authored
Invoke initlog from forkret on first user process
-
- Aug 15, 2011
-
-
Frans Kaashoek authored
-
Frans Kaashoek authored
-
Frans Kaashoek authored
Maybe the string boot shouldn't appear in xv6 code?
-
- Aug 12, 2011
-
-
Frans Kaashoek authored
-
Frans Kaashoek authored
-
- Aug 11, 2011
-
-
Frans Kaashoek authored
Remove device mapping from bootpgdir Remove unnecessary vmenable Set CPUS back to 2 in Makefile Passes all usertests
-
- Aug 09, 2011
-
-
Frans Kaashoek authored
-
Frans Kaashoek authored
Allocate proper kernel page table immediately in main using boot allocator Remove pginit Simplify address space layout a tiny bit More to come (e.g., superpages to simplify static table)
-
- Jul 29, 2011
-
-
Frans Kaashoek authored
Very important to give qemu memory through PHYSTOP :(
-
- Jul 27, 2011
-
-
Frans Kaashoek authored
Passes usertests and stressfs Seems to recover correctly in a number of simple cases
-
- Feb 19, 2011
-
-
Russ Cox authored
-
- Jan 11, 2011
-
-
Russ Cox authored
Variable declarations at top of function, separate from initialization. Use == 0 instead of ! for checking pointers. Consistent spacing around {, *, casts. Declare 0-parameter functions as (void) not (). Integer valued functions return -1 on failure, 0 on success.
-
- Sep 13, 2010
-
-
Robert Morris authored
delete most comments from bootother.S (since copy of bootasm.S) ksegment() -> seginit() move more stuff from main() to mainc()
-
- Aug 31, 2010
-
-
Austin Clements authored
-
Robert Morris authored
kinit() knows about end and PHYSTOP map all of kernel read/write (rather than r/o instructions) thanks, austin
-
Robert Morris authored
do not keep sorted contiguous free list
-
- Aug 30, 2010
-
-
Robert Morris authored
-
Robert Morris authored
-
- Aug 05, 2010
-
-
Robert Morris authored
find out the hard way why user and kernel must have separate segment descriptors
-
Robert Morris authored
replace jstack with asm()s
-
- Jul 23, 2010
-
-
Frans Kaashoek authored
Includes code for TLB shootdown (which actually seems unnecessary for xv6)
-
- Jul 02, 2010
-
-
Frans Kaashoek authored
-
- Sep 02, 2009
-
-
Russ Cox authored
this time do it ourselves instead of piggybacking on TLS. add -fno-pic to Makefile; pic code breaks our fake TLS.
-
- Aug 30, 2009
-
-
Russ Cox authored
* rename c/cp to cpu/proc * rename cpu.context to cpu.scheduler * fix some comments * formatting for printout
-
- May 30, 2009
-
-
rsc authored
Some proc cleanup, moving some of copyproc into allocproc. Also, an experiment: use "thread-local" storage for c and cp instead of the #define macro for curproc[cpu()].
-
- Mar 08, 2009
- Aug 21, 2008
-
-
kolya authored
-
- 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
-
- Sep 27, 2007
-
-
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
-
rsc authored
-
rsc authored
test: store curproc at top of stack I don't actually think this is worthwhile, but I figured I would check it in before reverting it, so that it can be in the revision history. Pros: * curproc doesn't need to turn on/off interrupts * scheduler doesn't have to edit curproc anymore Cons: * it's ugly * all the stack computation is more complicated. * it doesn't actually simplify anything but curproc, and even curproc is harder to follow.
-
rsc authored
-
rsc authored
-