// TODO: CHECK/REPLACE/UPDATE OLD CODE (this file is based on xv6) // Sleeping locks #include "types.h" #include "riscv.h" #include "defs.h" #include "param.h" #include "memlayout.h" #include "sched.h" #include "proc.h" #include "sched.h" void initsleeplock(sched_sleeplock_t *lk, char *name) { initlock(&lk->spin, "sleep lock"); lk->debugstring = name; lk->islocked = 0; lk->pid = 0; } void acquiresleep(sched_sleeplock_t *lk) { acquire(&lk->spin); while (lk->islocked) { sleep(lk, &lk->spin); } lk->islocked = 1; lk->pid = myproc()->pid; release(&lk->spin); } void releasesleep(sched_sleeplock_t *lk) { acquire(&lk->spin); lk->islocked = 0; lk->pid = 0; sched_wake(lk); release(&lk->spin); } int holdingsleep(sched_sleeplock_t *lk) { int r; acquire(&lk->spin); r = lk->islocked && (lk->pid == myproc()->pid); release(&lk->spin); return r; }