xv6, line by line
kernel/sleeplock.h

kernel/sleeplock.h

C header · 9 lines · annotated 100% · kernel · upstream

Included by 12 fileskernel/bio.c, kernel/console.c, kernel/file.c, kernel/fs.c, kernel/log.c, kernel/pipe.c, kernel/printk.c, kernel/sleeplock.c, kernel/sysfile.c, kernel/uart.c, kernel/virtio_disk.c, user/init.c
About this file

The definition of the sleep lock, xv6’s lock for long waits. A process that finds a sleep lock taken gives up the CPU instead of spinning, so the lock can be held across slow operations such as reading a disk block. xv6 uses sleep locks for disk buffers (kernel/buf.h), in-memory inodes (kernel/file.h) and the UART’s transmit side (kernel/uart.c).

Read before: kernel/spinlock.h. Read next: kernel/sleeplock.c.

1// Long-term locks for processes
2struct sleeplock {
3 uint locked; // Is the lock held?
4 struct spinlock lk; // spinlock protecting this sleep lock
6 // For debugging:
7 char *name; // Name of lock.
8 int pid; // Process holding lock
9};