summaryrefslogtreecommitdiff
path: root/kernel/proc.c
AgeCommit message (Collapse)AuthorFilesLines
2019-07-04xFrans Kaashoek1-1/+1
2019-07-03Simplify wakeup1Frans Kaashoek1-11/+5
2019-07-03Apply some corresponding bug fixes from wq branch hereFrans Kaashoek1-27/+25
2019-07-02Fix a lost wakeup bug: the disk driver's wakeup() can run after theFrans Kaashoek1-65/+50
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-02Merge branch 'riscv' into riscv-procFrans Kaashoek1-13/+31
2019-07-02xFrans Kaashoek1-1/+1
2019-07-02Don't start processes at the end of the proc tableFrans Kaashoek1-6/+8
2019-07-02Avoid two cores selecting the same process to runFrans Kaashoek1-26/+33
2019-07-02avoid allocproc() returning a struct proc with non-zero p->szRobert Morris1-0/+2
2019-07-02Checkpoint switching to per-process locks, in attempt clarify xv6'sFrans Kaashoek1-69/+113
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-01have fork() fail, not panic, if not enough phys memRobert Morris1-13/+29
2019-06-11separate source into kernel/ user/ mkfs/Robert Morris1-0/+591