~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/trace/rv/monitor_wip.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 Monitor wip
  2 ===========
  3 
  4 - Name: wip - wakeup in preemptive
  5 - Type: per-cpu deterministic automaton
  6 - Author: Daniel Bristot de Oliveira <bristot@kernel.org>
  7 
  8 Description
  9 -----------
 10 
 11 The wakeup in preemptive (wip) monitor is a sample per-cpu monitor
 12 that verifies if the wakeup events always take place with
 13 preemption disabled::
 14 
 15                      |
 16                      |
 17                      v
 18                    #==================#
 19                    H    preemptive    H <+
 20                    #==================#  |
 21                      |                   |
 22                      | preempt_disable   | preempt_enable
 23                      v                   |
 24     sched_waking   +------------------+  |
 25   +--------------- |                  |  |
 26   |                |  non_preemptive  |  |
 27   +--------------> |                  | -+
 28                    +------------------+
 29 
 30 The wakeup event always takes place with preemption disabled because
 31 of the scheduler synchronization. However, because the preempt_count
 32 and its trace event are not atomic with regard to interrupts, some
 33 inconsistencies might happen. For example::
 34 
 35   preempt_disable() {
 36         __preempt_count_add(1)
 37         ------->        smp_apic_timer_interrupt() {
 38                                 preempt_disable()
 39                                         do not trace (preempt count >= 1)
 40 
 41                                 wake up a thread
 42 
 43                                 preempt_enable()
 44                                          do not trace (preempt count >= 1)
 45                         }
 46         <------
 47         trace_preempt_disable();
 48   }
 49 
 50 This problem was reported and discussed here:
 51   https://lore.kernel.org/r/cover.1559051152.git.bristot@redhat.com/
 52 
 53 Specification
 54 -------------
 55 Grapviz Dot file in tools/verification/models/wip.dot

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php