Robert Morris
7114bf43ed
Merge branch 'riscv-proc' of g.csail.mit.edu:xv6-dev into riscv-proc
2019-07-07 06:39:58 -04:00
Robert Morris
62313be582
another fork test
2019-07-07 06:39:31 -04:00
Frans Kaashoek
dabbc348bc
Maybe fix two races identified by rtm (thx!):
...
- during exit(), hold p's parent lock and p's lock across all changes
to p and its parent (e.g., reparenting and wakeup1). the lock
ordering between concurrent exits of children, parent, and great
parent might work out because processes form a tree.
- in wakeup1() test and set p->state atomically by asking caller to
have p locked.
a correctness proof would be desirable.
2019-07-06 16:38:41 -04:00
Robert Morris
75b0c6fc91
back-port fork/exit/exit tests to xv6-riscv
2019-07-05 12:33:26 -04:00
Robert Morris
be88befed7
two exit/exit tests
2019-07-05 11:44:51 -04:00
Frans Kaashoek
fab5e7c1de
Make size in stat.h be a uint64
...
Supporting print long using %l (a bit of cheat)
Modify ls to print size using %l
We should probably update size in inode too.
2019-07-04 08:57:23 -04:00
Frans Kaashoek
6bfb078b14
x
2019-07-04 08:54:16 -04:00
Frans Kaashoek
47e69250d0
Simplify wakeup1
2019-07-03 15:38:30 -04:00
Frans Kaashoek
cee830af24
Apply some corresponding bug fixes from wq branch here
2019-07-03 15:18:55 -04:00
Frans Kaashoek
ccf299850b
Remove some debugging code
2019-07-02 20:52:30 -04:00
Frans Kaashoek
26f306113a
Fix a lost wakeup bug: the disk driver's wakeup() can run after the
...
reading process acquired p->lock and released virtio lock in sleep(),
but before the process had set p->status to SLEEPING, because the
wakeup tested p->status without holding p's lock. Thus, wakeup can
complete without seeing any process SLEEPING and then p sets p->status
to SLEEPING.
Fix some other issues:
- Don't initialize proc lock in allocproc(), because freeproc() sets
np->state = UNUSED and allocproc() can choose np and calls initlock()
on the process's lock, releasing np's lock accidentally. Move
initializing proc's lock to init.
- Protect nextpid using ptable.lock (and move into its own function)
Some clean up:
- Don't acquire p->lock when it p is used in a private way (e.g., exit()/grow()).
- Move find_runnable() back into scheduler().
2019-07-02 19:29:14 -04:00
Frans Kaashoek
1e4d7065d6
Merge branch 'riscv' into riscv-proc
2019-07-02 14:19:31 -04:00
Frans Kaashoek
84c759fc02
x
2019-07-02 14:09:38 -04:00
Frans Kaashoek
37ac6f8f4f
Don't start processes at the end of the proc table
2019-07-02 13:55:52 -04:00
Frans Kaashoek
da51735980
Avoid two cores selecting the same process to run
2019-07-02 13:40:33 -04:00
Robert Morris
f59c1bf1d8
try to continue from walk() failing to allocate a page-table page
2019-07-02 11:45:06 -04:00
Robert Morris
b27f275014
avoid allocproc() returning a struct proc with non-zero p->sz
2019-07-02 11:17:50 -04:00
Robert Morris
1540c8b15a
COW tests
2019-07-02 11:04:35 -04:00
Frans Kaashoek
67702cf706
Checkpoint switching to per-process locks, in attempt clarify xv6's
...
locking plan, which is a difficult to understand because ptable lock
protects many invariants. This implementation has a bug: once in a
while xv6 unlocks a proc lock that is locked by another core.
2019-07-02 09:14:47 -04:00
Robert Morris
40f1041a0a
don't enable interrupts until done with sstatus, scause, &c
2019-07-02 05:20:11 -04:00
Robert Morris
535ac52efa
oops, don't hold mycpu() result across intr_off()
2019-07-01 17:54:41 -04:00
Robert Morris
abfe9999f4
have fork() fail, not panic, if not enough phys mem
2019-07-01 17:46:06 -04:00
Robert Morris
18e76a6c47
sbrk() returns a pointer, so it should be 64 bits
2019-07-01 17:01:50 -04:00
Robert Morris
9b99f00743
oops, don't hold mycpu() result across intr_off()
2019-07-01 14:15:18 -04:00
Robert Morris
0498bfd159
timer interrupt in the kernel -> yield
2019-07-01 13:46:11 -04:00
Frans Kaashoek
c34bd3d167
Checkpoint some progress compiling xv6.pdf
2019-07-01 13:02:24 -04:00
Frans Kaashoek
2c0338fe42
x
2019-07-01 08:28:14 -04:00
Frans Kaashoek
af6c35e14b
Introduce alloc3_desc and UsedArea to make code easier to read
2019-07-01 08:20:35 -04:00
Robert Morris
a8305b7318
FD_DEVICE
2019-06-13 10:29:27 -04:00
Robert Morris
46744c4a13
for spinlocks, use gcc intrinsics, but say what they compile to
2019-06-13 10:00:50 -04:00
Robert Morris
ca39672a30
clean up virtio code
2019-06-13 09:40:17 -04:00
Robert Morris
4adf016925
eliminate ramdisk
2019-06-13 06:57:38 -04:00
Robert Morris
de9d72c908
virtio disk driver
2019-06-13 06:49:02 -04:00
Robert Morris
5753553213
separate source into kernel/ user/ mkfs/
2019-06-11 09:57:14 -04:00
Robert Morris
91ba81110a
gdb backtraces: -ggdb, -fno-omit-frame-pointer, BSIZE=1024
2019-06-06 13:54:03 -04:00
Robert Morris
8607051b5f
fix a create()/unlink() deadlock
2019-06-06 10:38:11 -04:00
Robert Morris
31ef85f552
add plic.c
2019-06-06 05:19:59 -04:00
Robert Morris
b05bcce939
add kernelvec
2019-06-06 05:19:35 -04:00
Robert Morris
dff7ab3f8f
make -O work with asm volatile(...)
2019-06-05 15:05:56 -04:00
Robert Morris
5684556c19
clean up -Wall
2019-06-05 14:31:13 -04:00
Robert Morris
5eb1cb4972
push_off() and pop_off() in myproc()
2019-06-05 14:14:57 -04:00
Robert Morris
3113643768
spinlocks using gcc intrinsics
...
push_off() / pop_off()
set up per-hart plic stuff so all harts get device interrupts
2019-06-05 14:05:46 -04:00
Robert Morris
f1a727b971
start at support for multiple CPUs
2019-06-05 11:42:03 -04:00
Robert Morris
ec3d3a1fce
yield if timer interrupt
...
all user tests passed
2019-06-04 14:25:48 -04:00
Robert Morris
a82772594e
timer interrupts -> supervisor software interrupt
2019-06-04 14:20:37 -04:00
Robert Morris
cff3ce6e04
more sbrk fixes
2019-06-04 11:31:50 -04:00
Robert Morris
0e131b2263
fix a problem with end. make uartputc() wait until h/w is ready.
2019-06-04 10:43:45 -04:00
Robert Morris
b78894f34e
check that arguments aren't more than a page in exec()
2019-06-04 06:51:01 -04:00
Robert Morris
0f684b9150
fix exec argc
2019-06-04 06:45:09 -04:00
Robert Morris
8baac76050
support read() and write() bigger than one page
2019-06-04 05:57:47 -04:00