1 ================================== 2 RT-mutex subsystem with PI support 3 ================================== 4 5 RT-mutexes with priority inheritance are used 6 which enable pthread_mutex_t priority inherita 7 (PTHREAD_PRIO_INHERIT). [See Documentation/loc 8 about PI-futexes.] 9 10 This technology was developed in the -rt tree 11 pthread_mutex support. 12 13 Basic principles: 14 ----------------- 15 16 RT-mutexes extend the semantics of simple mute 17 inheritance protocol. 18 19 A low priority owner of a rt-mutex inherits th 20 priority waiter until the rt-mutex is released 21 boosted owner blocks on a rt-mutex itself it p 22 boosting to the owner of the other rt_mutex it 23 priority boosting is immediately removed once 24 unlocked. 25 26 This approach allows us to shorten the block o 27 mutexes which protect shared resources. Priori 28 magic bullet for poorly designed applications, 29 well-designed applications to use userspace lo 30 an high priority thread, without losing determ 31 32 The enqueueing of the waiters into the rtmutex 33 priority order. For same priorities FIFO order 34 rtmutex, only the top priority waiter is enque 35 priority waiters tree. This tree too queues in 36 the top priority waiter of a task changes (for 37 got a signal), the priority of the owner task 38 priority enqueueing is handled by "pi_waiters" 39 40 RT-mutexes are optimized for fastpath operatio 41 locking overhead when locking an uncontended m 42 without waiters. The optimized fastpath operat 43 support. [If that is not available then the rt 44 is used] 45 46 The state of the rt-mutex is tracked via the o 47 structure: 48 49 lock->owner holds the task_struct pointer of t 50 keep track of the "lock has waiters" state: 51 52 ============ ======= ======================== 53 owner bit0 Notes 54 ============ ======= ======================== 55 NULL 0 lock is free (fast acqui 56 NULL 1 lock is free and has wai 57 is going to take the loc 58 taskpointer 0 lock is held (fast relea 59 taskpointer 1 lock is held and has wai 60 ============ ======= ======================== 61 62 The fast atomic compare exchange based acquire 63 possible when bit 0 of lock->owner is 0. 64 65 .. [1] It also can be a transitional state whe 66 with ->wait_lock is held. To prevent an 67 we need to set the bit0 before looking 68 be NULL in this small time, hence this 69 70 .. [2] There is a small time when bit 0 is set 71 waiters. This can happen when grabbing 72 To prevent a cmpxchg of the owner relea 73 set this bit before looking at the lock 74 75 BTW, there is still technically a "Pending Own 76 that anymore. The pending owner happens to be 77 that has no owner and has been woken up to gra
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.