| RULE = always ((RT and SLEEP) imply (RT_FRIENDLY_SLEEP or ALLOWLIST)) |
| |
| RT_FRIENDLY_SLEEP = (RT_VALID_SLEEP_REASON or KERNEL_THREAD) |
| and ((not WAKE) until RT_FRIENDLY_WAKE) |
| |
| RT_VALID_SLEEP_REASON = FUTEX_WAIT |
| or RT_FRIENDLY_NANOSLEEP |
| |
| RT_FRIENDLY_NANOSLEEP = CLOCK_NANOSLEEP |
| and NANOSLEEP_TIMER_ABSTIME |
| and (NANOSLEEP_CLOCK_MONOTONIC or NANOSLEEP_CLOCK_TAI) |
| |
| RT_FRIENDLY_WAKE = WOKEN_BY_EQUAL_OR_HIGHER_PRIO |
| or WOKEN_BY_HARDIRQ |
| or WOKEN_BY_NMI |
| or ABORT_SLEEP |
| or KTHREAD_SHOULD_STOP |
| |
| ALLOWLIST = BLOCK_ON_RT_MUTEX |
| or FUTEX_LOCK_PI |
| or TASK_IS_RCU |
| or TASK_IS_MIGRATION |