On Tue, 10 Jun 2025 11:43:42 +0200 Nam Cao <nam...@linutronix.de> wrote:
> +static void > +ltl_possible_next_states(struct ltl_monitor *mon, unsigned int state, > unsigned long *next) > +{ > + bool task_is_migration = test_bit(LTL_TASK_IS_MIGRATION, mon->atoms); > + bool task_is_rcu = test_bit(LTL_TASK_IS_RCU, mon->atoms); > + bool val40 = task_is_rcu || task_is_migration; > + bool futex_lock_pi = test_bit(LTL_FUTEX_LOCK_PI, mon->atoms); > + bool val41 = futex_lock_pi || val40; > + bool block_on_rt_mutex = test_bit(LTL_BLOCK_ON_RT_MUTEX, mon->atoms); > + bool val5 = block_on_rt_mutex || val41; > + bool kthread_should_stop = test_bit(LTL_KTHREAD_SHOULD_STOP, > mon->atoms); > + bool abort_sleep = test_bit(LTL_ABORT_SLEEP, mon->atoms); > + bool val32 = abort_sleep || kthread_should_stop; > + bool woken_by_nmi = test_bit(LTL_WOKEN_BY_NMI, mon->atoms); > + bool val33 = woken_by_nmi || val32; > + bool woken_by_hardirq = test_bit(LTL_WOKEN_BY_HARDIRQ, mon->atoms); > + bool val34 = woken_by_hardirq || val33; > + bool woken_by_equal_or_higher_prio = > test_bit(LTL_WOKEN_BY_EQUAL_OR_HIGHER_PRIO, > + mon->atoms); > + bool val14 = woken_by_equal_or_higher_prio || val34; > + bool wake = test_bit(LTL_WAKE, mon->atoms); > + bool val13 = !wake; > + bool kernel_thread = test_bit(LTL_KERNEL_THREAD, mon->atoms); > + bool nanosleep_clock_tai = test_bit(LTL_NANOSLEEP_CLOCK_TAI, > mon->atoms); > + bool nanosleep_clock_monotonic = > test_bit(LTL_NANOSLEEP_CLOCK_MONOTONIC, mon->atoms); > + bool val24 = nanosleep_clock_monotonic || nanosleep_clock_tai; > + bool nanosleep_timer_abstime = test_bit(LTL_NANOSLEEP_TIMER_ABSTIME, > mon->atoms); > + bool val25 = nanosleep_timer_abstime && val24; > + bool clock_nanosleep = test_bit(LTL_CLOCK_NANOSLEEP, mon->atoms); > + bool val18 = clock_nanosleep && val25; > + bool futex_wait = test_bit(LTL_FUTEX_WAIT, mon->atoms); > + bool val9 = futex_wait || val18; > + bool val11 = val9 || kernel_thread; > + bool sleep = test_bit(LTL_SLEEP, mon->atoms); > + bool val2 = !sleep; > + bool rt = test_bit(LTL_RT, mon->atoms); > + bool val1 = !rt; > + bool val3 = val1 || val2; > + > + switch (state) { > + case S0: > + if (val3) > + __set_bit(S0, next); > + if (val11 && val13) > + __set_bit(S1, next); > + if (val11 && val14) > + __set_bit(S4, next); > + if (val5) > + __set_bit(S5, next); > + break; What's with all the magic numbers? Can we turn these into enums so they have some meaning for us humans? -- Steve > + case S1: > + if (val11 && val13) > + __set_bit(S1, next); > + if (val13 && val3) > + __set_bit(S2, next); > + if (val14 && val3) > + __set_bit(S3, next); > + if (val11 && val14) > + __set_bit(S4, next); > + if (val13 && val5) > + __set_bit(S6, next); > + if (val14 && val5) > + __set_bit(S7, next); > + break; > + case S2: > + if (val11 && val13) > + __set_bit(S1, next); > + if (val13 && val3) > + __set_bit(S2, next); > + if (val14 && val3) > + __set_bit(S3, next); > + if (val11 && val14) > + __set_bit(S4, next); > + if (val13 && val5) > + __set_bit(S6, next); > + if (val14 && val5) > + __set_bit(S7, next); > + break; > + case S3: > + if (val3) > + __set_bit(S0, next); > + if (val11 && val13) > + __set_bit(S1, next); > + if (val11 && val14) > + __set_bit(S4, next); > + if (val5) > + __set_bit(S5, next); > + break; > + case S4: > + if (val3) > + __set_bit(S0, next); > + if (val11 && val13) > + __set_bit(S1, next); > + if (val11 && val14) > + __set_bit(S4, next); > + if (val5) > + __set_bit(S5, next); > + break; > + case S5: > + if (val3) > + __set_bit(S0, next); > + if (val11 && val13) > + __set_bit(S1, next); > + if (val11 && val14) > + __set_bit(S4, next); > + if (val5) > + __set_bit(S5, next); > + break; > + case S6: > + if (val11 && val13) > + __set_bit(S1, next); > + if (val13 && val3) > + __set_bit(S2, next); > + if (val14 && val3) > + __set_bit(S3, next); > + if (val11 && val14) > + __set_bit(S4, next); > + if (val13 && val5) > + __set_bit(S6, next); > + if (val14 && val5) > + __set_bit(S7, next); > + break; > + case S7: > + if (val3) > + __set_bit(S0, next); > + if (val11 && val13) > + __set_bit(S1, next); > + if (val11 && val14) > + __set_bit(S4, next); > + if (val5) > + __set_bit(S5, next); > + break; > + } > +}