Monitor wwnr

  • Name: wwrn - wakeup while not running

  • Type: per-task deterministic automaton

  • Author: Daniel Bristot de Oliveira <bristot@kernel.org>

Description

This is a per-task sample monitor, with the following definition:

             |
             |
             v
  wakeup   +-------------+
+--------- |             |
|          | not_running |
+--------> |             | <+
           +-------------+  |
             |              |
             | switch_in    | switch_out
             v              |
           +-------------+  |
           |   running   | -+
           +-------------+

This model is broken, the reason is that a task can be running in the processor without being set as RUNNABLE. Think about a task about to sleep:

1:      set_current_state(TASK_UNINTERRUPTIBLE);
2:      schedule();

And then imagine an IRQ happening in between the lines one and two, waking the task up. BOOM, the wakeup will happen while the task is running.

  • Why do we need this model, so?

  • To test the reactors.

Specification

Grapviz Dot file in tools/verification/models/wwnr.dot