1RULE = always ((RT and SLEEP) imply (RT_FRIENDLY_SLEEP or ALLOWLIST))
2
3RT_FRIENDLY_SLEEP = (RT_VALID_SLEEP_REASON or KERNEL_THREAD)
4                and ((not WAKE) until RT_FRIENDLY_WAKE)
5
6RT_VALID_SLEEP_REASON = FUTEX_WAIT
7                     or RT_FRIENDLY_NANOSLEEP
8
9RT_FRIENDLY_NANOSLEEP = CLOCK_NANOSLEEP
10                    and NANOSLEEP_TIMER_ABSTIME
11                    and (NANOSLEEP_CLOCK_MONOTONIC or NANOSLEEP_CLOCK_TAI)
12
13RT_FRIENDLY_WAKE = WOKEN_BY_EQUAL_OR_HIGHER_PRIO
14                or WOKEN_BY_HARDIRQ
15                or WOKEN_BY_NMI
16                or ABORT_SLEEP
17                or KTHREAD_SHOULD_STOP
18
19ALLOWLIST = BLOCK_ON_RT_MUTEX
20         or FUTEX_LOCK_PI
21         or TASK_IS_RCU
22         or TASK_IS_MIGRATION
23