| 1 | RULE = always ((RT and SLEEP and USER_THREAD) imply (RT_FRIENDLY_SLEEP or ALLOWLIST)) |
| 2 | |
| 3 | RT_FRIENDLY_SLEEP = RT_VALID_SLEEP_REASON |
| 4 | and ((not SCHEDULE_IN) until RT_FRIENDLY_WAKE) |
| 5 | |
| 6 | RT_VALID_SLEEP_REASON = FUTEX_WAIT |
| 7 | or RT_FRIENDLY_NANOSLEEP |
| 8 | or EPOLL_WAIT |
| 9 | |
| 10 | RT_FRIENDLY_NANOSLEEP = CLOCK_NANOSLEEP |
| 11 | and NANOSLEEP_TIMER_ABSTIME |
| 12 | and not NANOSLEEP_CLOCK_REALTIME |
| 13 | |
| 14 | RT_FRIENDLY_WAKE = WOKEN_BY_EQUAL_OR_HIGHER_PRIO |
| 15 | or WOKEN_BY_HARDIRQ |
| 16 | or WOKEN_BY_NMI |
| 17 | or ABORT_SLEEP |
| 18 | |
| 19 | ALLOWLIST = BLOCK_ON_RT_MUTEX |
| 20 | or FUTEX_LOCK_PI |