summaryrefslogtreecommitdiff
path: root/main.c
AgeCommit message (Collapse)AuthorFilesLines
2017-08-29fix runoff complaints about pagination and long linesRobert Morris1-0/+4
2017-08-09Commit to running on an SMP (perhaps with only 1 core). Remove most codeFrans Kaashoek1-3/+1
from picirq.c and remove timer.c completely. Update runoff.list.
2017-02-01Eliminate code for gs trick to track per-cpu state. We rely on lapiccpunum()Frans Kaashoek1-1/+1
to find a per-cpu id with which we locate a cpu's cpu struct.
2017-01-31Start of an experiment to remove the use of gs for cpu local variables.Frans Kaashoek1-5/+4
2016-09-02Make runoff happyFrans Kaashoek1-3/+0
2016-09-02APIC IDs may not be consecutive and start from zero, so we cannot really use itFrans Kaashoek1-3/+3
as a direct index into cpus. Record apicid in struct cpu and have cpunum() look for it. Replace cpu->id with cpunum() everywhere, and replace cpu->id with cpu->apicid. Thanks to Xi Wang.
2016-08-25Remove trailing white space with:Frans Kaashoek1-3/+3
for f in *.{h,c}; do sed -i .sed 's/[[:blank:]]*$//' $f; done (Thanks to Nicolás Wolovick)
2016-08-24p2v -> P2VRobert Morris1-3/+3
2016-08-11main commentsRobert Morris1-7/+6
2016-08-10more comments in entryother.SRobert Morris1-4/+5
2015-06-27Pick up where i left off in april:Frans Kaashoek1-1/+0
- move log into metadata part of disk, so that marking that the log's blocks are in use falls out for free - superblock describes the whole disk (sizes and offets) - sizes and offsets are computed in one place (mkfs) and the rest of the code refers to the superblock for these values, instead of recomputing them.
2014-08-29Nice layout for a printout of the codeFrans Kaashoek1-1/+4
2012-08-22Remove unused argument from lapicinit (thanks to Peter Froehlich)Frans Kaashoek1-2/+2
2011-09-14Use | instead of + for entrypgdir. Linker doesn't get in our way here.Austin Clements1-2/+2
2011-09-13eliminate enter_alloc -- use kalloc for everythingRobert Morris1-9/+6
2011-09-01Fix layout issues for printed versionFrans Kaashoek1-8/+9
2011-08-30enterpgdir -> entrypgdirRobert Morris1-5/+5
2011-08-29Style nits; indentation and tabsAustin Clements1-4/+4
2011-08-22Remove sys_init syscallFrans Kaashoek1-1/+1
Invoke initlog from forkret on first user process
2011-08-15Avoid "boot" in xv6Frans Kaashoek1-29/+21
2011-08-15Use 4Mbyte pages during bootFrans Kaashoek1-1034/+3
2011-08-15Separate more clearly bootloader from xv6 by renaming multiboot.S to entry.S ↵Frans Kaashoek1-11/+11
etc. Maybe the string boot shouldn't appear in xv6 code?
2011-08-12OopsFrans Kaashoek1-2/+2
2011-08-12Some commentsFrans Kaashoek1-1/+7
2011-08-11Make AP processors boot using bootpgdirFrans Kaashoek1-23/+14
Remove device mapping from bootpgdir Remove unnecessary vmenable Set CPUS back to 2 in Makefile Passes all usertests
2011-08-09Remove jmpkstackFrans Kaashoek1-27/+2
2011-08-09Use static page table for boot, mapping first 4Mbyte; no more segment trickFrans Kaashoek1-4/+1058
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)
2011-07-29Map kernel highFrans Kaashoek1-10/+23
Very important to give qemu memory through PHYSTOP :(
2011-07-27Dirt simple loggingFrans Kaashoek1-1/+1
Passes usertests and stressfs Seems to recover correctly in a number of simple cases
2011-02-19xv6: formatting, cleanup, rev5 (take 2)Russ Cox1-1/+6
2011-01-11make new code like old codeRuss Cox1-15/+15
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.
2010-09-13change some comments, maybe more informativeRobert Morris1-8/+16
delete most comments from bootother.S (since copy of bootasm.S) ksegment() -> seginit() move more stuff from main() to mainc()
2010-09-01Space policeAustin Clements1-1/+1
2010-08-31no more pminit, or ELF header at 0x10000Robert Morris1-1/+1
kinit() knows about end and PHYSTOP map all of kernel read/write (rather than r/o instructions) thanks, austin
2010-08-31kalloc/kfree now only a page at a timeRobert Morris1-2/+2
do not keep sorted contiguous free list
2010-08-30xxRobert Morris1-1/+1
2010-08-30set only PG and WP in vminit; the rest don't seem to be needed and are confusingRobert Morris1-1/+1
2010-08-05add some commentsRobert Morris1-10/+12
find out the hard way why user and kernel must have separate segment descriptors
2010-08-05move jkstack to main.cRobert Morris1-6/+16
replace jstack with asm()s
2010-07-23Checkpoint page-table version for SMPFrans Kaashoek1-14/+9
Includes code for TLB shootdown (which actually seems unnecessary for xv6)
2010-07-02Initial version of single-cpu xv6 with page tablesFrans Kaashoek1-6/+20
2009-09-02another attempt at cpu-local variables.Russ Cox1-3/+1
this time do it ourselves instead of piggybacking on TLS. add -fno-pic to Makefile; pic code breaks our fake TLS.
2009-08-30assorted fixes:Russ Cox1-10/+10
* rename c/cp to cpu/proc * rename cpu.context to cpu.scheduler * fix some comments * formatting for printout
2009-05-31Some proc cleanup, moving some of copyproc into allocproc.rsc1-11/+16
Also, an experiment: use "thread-local" storage for c and cp instead of the #define macro for curproc[cpu()].
2009-03-08be consistent: no underscores in function namesrsc1-10/+10
2009-03-08xv6: boot loader adjustmentsrsc1-5/+0
do Bochs breakpoint and spin in bootasm.S. not needed in bootmain too. fix readseg bug (rounding of va). zero segments when memsz > filesz. no need to clear BSS in kernel main. make bootother.S like bootasm.S
2008-08-21fix obvious printf nits after reading through codekolya1-1/+1
2007-10-01Incorporate new understanding of/with Intel SMP spec.rsc1-1/+2
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.
2007-09-30Re: why cpuid() in locking code?rsc1-1/+0
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
2007-09-27Final word on the locking fiasco?rsc1-17/+8
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.