Monitor wip =========== - Name: wip - wakeup in preemptive - Type: per-cpu deterministic automaton - Author: Daniel Bristot de Oliveira Description ----------- The wakeup in preemptive (wip) monitor is a sample per-cpu monitor that verifies if the wakeup events always take place with preemption disabled:: | | v #==================# H preemptive H <+ #==================# | | | | preempt_disable | preempt_enable v | sched_waking +------------------+ | +--------------- | | | | | non_preemptive | | +--------------> | | -+ +------------------+ The wakeup event always takes place with preemption disabled because of the scheduler synchronization. However, because the preempt_count and its trace event are not atomic with regard to interrupts, some inconsistencies might happen. For example:: preempt_disable() { __preempt_count_add(1) -------> smp_apic_timer_interrupt() { preempt_disable() do not trace (preempt count >= 1) wake up a thread preempt_enable() do not trace (preempt count >= 1) } <------ trace_preempt_disable(); } This problem was reported and discussed here: https://lore.kernel.org/r/cover.1559051152.git.bristot@redhat.com/ Specification ------------- Grapviz Dot file in tools/verification/models/wip.dot