Commit graph

235 commits

Author SHA1 Message Date
Frans Kaashoek
f1bb53c690 The driver should free descriptors, not interrupt handler. This
avoids handler freeing descriptors before driver sees that the request
has completed.
2019-07-30 08:13:03 -04:00
Frans Kaashoek
5304310452 Remove B_DIRTY
Use refcnt to pin blocks into the cache
Replace flags/B_VALID with a boolean field valid
Use info[id].status to signal completion of disk interrupt
Pass a read/write flag to virtio_disk_rw
2019-07-29 17:33:16 -04:00
Robert Morris
47b9cfee49 separate out timer init code for clarity 2019-07-28 13:16:49 -04:00
Robert Morris
1ec50c5848 xxx 2019-07-28 07:43:22 -04:00
Robert Morris
6507da772d argptr no longer needed, since copyin checks 2019-07-28 06:29:37 -04:00
Robert Morris
629faafa36 cleaner UART register interface 2019-07-27 06:44:24 -04:00
Robert Morris
a33f60fea3 console/uart tweaks 2019-07-27 05:47:19 -04:00
Robert Morris
cf48b24c03 beautify console.c 2019-07-27 04:15:06 -04:00
Robert Morris
281d450a08 split printf into a separate file, to make console.c more like a driver 2019-07-27 03:49:03 -04:00
Robert Morris
cc1a303d09 fetchint isn't used any more 2019-07-26 12:34:06 -04:00
Robert Morris
f0987d82dc ??? 2019-07-26 11:09:54 -04:00
Robert Morris
c714e3e35c machinevec -> timervec 2019-07-26 10:17:02 -04:00
Robert Morris
fa2e2e3c81 uservec before userret in trampoline, to match book and kernelvec 2019-07-26 09:38:22 -04:00
Robert Morris
8d30e21b59 Merge branch 'riscv' of g.csail.mit.edu:xv6-dev into riscv 2019-07-26 04:53:59 -04:00
Robert Morris
ea95a6654c trampin -> uservec
trampout -> userret
2019-07-26 04:53:46 -04:00
Frans Kaashoek
47c9721d78 a few name changes in panic msg 2019-07-25 06:59:07 -04:00
Robert Morris
4e62de64cd fix an exit/exit deadlock -> one more locking protocol violation
increase timer rate from 1/second to 10/second
2019-07-25 06:30:49 -04:00
Robert Morris
b19adf79f9 purge x86 stuff from defs.h 2019-07-25 05:37:35 -04:00
Robert Morris
5d5e4e065f comments for timer setup 2019-07-25 05:35:03 -04:00
Robert Morris
9a817bd134 rationalize some vm function names 2019-07-24 15:28:37 -04:00
Robert Morris
da898a11b6 ??? 2019-07-24 14:40:13 -04:00
Robert Morris
a77287e924 no more PAGEBREAK 2019-07-24 13:33:43 -04:00
Robert Morris
b4f89bb529 ping-pong exercise 2019-07-24 10:39:05 -04:00
Robert Morris
8f6865d1f1 display assembly instructions, to help with first.tex exercise 2019-07-24 10:15:45 -04:00
Robert Morris
936afc6e1a mstart -> start 2019-07-23 14:31:12 -04:00
Robert Morris
54178ad94d simplify kernel mapping calls 2019-07-23 12:17:17 -04:00
Robert Morris
55bc96d419 a few core -> CPU
get rid of PDF generating support
2019-07-23 11:14:10 -04:00
Frans Kaashoek
b8a31c494c one more TRAMPOLINE 2019-07-23 07:30:23 -04:00
Frans Kaashoek
6c78af4a57 fix mapkstack 2019-07-22 20:58:15 -04:00
Frans Kaashoek
b2e9c8eea5 Clear U bit for second stack page so that it functions as a guard page 2019-07-22 15:38:08 -04:00
Robert Morris
38b430687c nit 2019-07-22 15:04:07 -04:00
Robert Morris
6b379e4707 -MD and TRAPFRAME 2019-07-22 14:54:40 -04:00
Frans Kaashoek
5eab649255 Allocate 2 pages per proc, with the top one unmapped.
The page below the last proc is unmapped by default (because the
kernel doesn't map anything right below the kernel stacks).
2019-07-22 14:30:45 -04:00
Frans Kaashoek
c5d48db045 Merge branch 'riscv-kstack' into riscv 2019-07-22 13:32:33 -04:00
Robert Morris
328204d9cc not much 2019-07-20 18:51:31 -04:00
Robert Morris
06e49a58dc pi for pipe, rather than p, to avoid confusion with proc's p->lock 2019-07-20 17:07:20 -04:00
Robert Morris
3333665ab6 not much 2019-07-20 10:17:26 -04:00
Robert Morris
2418ac380c it's not clear that the release will always enable interrupts 2019-07-19 13:27:48 -04:00
Frans Kaashoek
06109901c9 x 2019-07-19 11:27:02 -04:00
Robert Morris
dbd729b32d with per-proc locks, we don't need the intr_on() inside the loop. 2019-07-19 10:20:02 -04:00
Robert Morris
32168df609 no need to save/restore 14 2019-07-19 09:02:15 -04:00
Frans Kaashoek
9156632701 One way of supporting a guard page below kstack: allocate kstacks in
procinit() and map them high up (below TRAMPOLNE) with an empty
mapping below each stack.  Never free a kernel stack.

Another way would be to allocate and map them dynamically, but then we
need to reload page table when switching processes in scheduler()
and/or have a kernel pagetable per proc (if we want k->stack to be the
same virtual address in each process).

One gotcha: kernel addresses are not equal to physical addresses for
stack addresses.  A stack address must be translated if we need its
physical address (e.g., virtio passes a stack address to the disk).
2019-07-19 08:38:51 -04:00
Frans Kaashoek
b924e44f06 Merge branch 'riscv' of g.csail.mit.edu:xv6-dev into riscv 2019-07-17 05:53:47 -04:00
Frans Kaashoek
ce53416f49 Delete x86 comment 2019-07-17 05:53:34 -04:00
Robert Morris
ebc3937209 conservatively call sfence.vma before every satp load. 2019-07-16 17:02:21 -04:00
Robert Morris
6bbc2b2245 cosmetic changes 2019-07-11 10:38:56 -04:00
Robert Morris
7797a38423 another test, to help with locking exercises 2019-07-11 05:41:59 -04:00
Robert Morris
4bc900e78b nits 2019-07-10 14:54:34 -04:00
Robert Morris
061e3be6f8 more comment cleanup 2019-07-10 10:13:08 -04:00
Robert Morris
c0266a877a document which proc fields are protected by p->lock 2019-07-10 09:28:00 -04:00
Robert Morris
5eb1685700 have kill() lock before looking at p->pid
document wait()'s use of np->parent w/o holding lock.
2019-07-10 09:24:50 -04:00
Robert Morris
9981bb2270 tweak some comments. 2019-07-10 08:57:51 -04:00
Robert Morris
9d34838b4f holding p->lock all the way through state=RUNNABLE means we don't need EMBRYO 2019-07-08 11:11:00 -04:00
Robert Morris
db72f3108f eliminate ptable. ptable.lock -> pid_lock. 2019-07-07 15:20:13 -04:00
Robert Morris
4ce3a5fa21 nits 2019-07-07 14:57:16 -04:00
Robert Morris
c4f6a241cd avoid a double-lock of initproc->lock if child of init is reparenting 2019-07-07 07:03:28 -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
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
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