linux.conf.au, January 2003 PRINCIPLES: Race Conditions We cannot call any function which might sleep (schedule()) while using ANY of these. There are special primitives for protecting from other user contexts while in user context: they sleep if they have to wait: down_interruptible(struct semaphore *) & up(struct semaphore *) down_read(struct rw_semaphore *) & up_read(struct rw_semaphore *) down_write(struct rw_semaphore *) & up_write(struct rw_semaphore*)