lk 13 kernel/sleeplock.c initsleeplock(struct sleeplock *lk, char *name) lk 15 kernel/sleeplock.c initlock(&lk->lk, "sleep lock"); lk 16 kernel/sleeplock.c lk->name = name; lk 17 kernel/sleeplock.c lk->locked = 0; lk 18 kernel/sleeplock.c lk->pid = 0; lk 22 kernel/sleeplock.c acquiresleep(struct sleeplock *lk) lk 24 kernel/sleeplock.c acquire(&lk->lk); lk 25 kernel/sleeplock.c while (lk->locked) { lk 26 kernel/sleeplock.c sleep_prepare(lk); lk 27 kernel/sleeplock.c release(&lk->lk); lk 29 kernel/sleeplock.c acquire(&lk->lk); lk 31 kernel/sleeplock.c lk->locked = 1; lk 32 kernel/sleeplock.c lk->pid = myproc()->pid; lk 33 kernel/sleeplock.c release(&lk->lk); lk 37 kernel/sleeplock.c releasesleep(struct sleeplock *lk) lk 39 kernel/sleeplock.c acquire(&lk->lk); lk 40 kernel/sleeplock.c lk->locked = 0; lk 41 kernel/sleeplock.c lk->pid = 0; lk 42 kernel/sleeplock.c wakeup(lk); lk 43 kernel/sleeplock.c release(&lk->lk); lk 47 kernel/sleeplock.c holdingsleep(struct sleeplock *lk) lk 51 kernel/sleeplock.c acquire(&lk->lk); lk 52 kernel/sleeplock.c r = lk->locked && (lk->pid == myproc()->pid); lk 53 kernel/sleeplock.c release(&lk->lk); lk 4 kernel/sleeplock.h struct spinlock lk; // spinlock protecting this sleep lock lk 12 kernel/spinlock.c initlock(struct spinlock *lk, char *name) lk 14 kernel/spinlock.c lk->name = name; lk 15 kernel/spinlock.c lk->locked = 0; lk 16 kernel/spinlock.c lk->cpu = 0; lk 22 kernel/spinlock.c acquire(struct spinlock *lk) lk 25 kernel/spinlock.c if (holding(lk)) lk 37 kernel/spinlock.c while (__atomic_exchange_n(&lk->locked, 1, __ATOMIC_ACQUIRE) != 0) lk 41 kernel/spinlock.c lk->cpu = mycpu(); lk 46 kernel/spinlock.c release(struct spinlock *lk) lk 48 kernel/spinlock.c if (!holding(lk)) lk 51 kernel/spinlock.c lk->cpu = 0; lk 73 kernel/spinlock.c __atomic_store_n(&lk->locked, 0, __ATOMIC_RELEASE); lk 81 kernel/spinlock.c holding(struct spinlock *lk) lk 84 kernel/spinlock.c r = (lk->locked && lk->cpu == mycpu());