There are three types of locking. On a uniprocessor, interrupts must be blocked
during critical sections of code. In this port, interrupts are Linux signals,
which are blocked and enabled using sigprocmask.

SMP locking involves a processor locking other processors out of a critical
section of code until it has left it. The instructions needed to do this are
not privileged on i386, so the SMP locking primitives are simply inherited from
the i386 port.

The same is true of semaphores. The i386 semaphore primitives work in user space
as well as in the kernel, so they are inherited from the i386 port.