diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-09-16 18:29:36 -0400 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-09-16 18:29:36 -0400 |
commit | c58a74c8ad2d2b1b01be12afb9bac58dfef0d16a (patch) | |
tree | 60dbed545715ecf91ab7409789c1a9effd791348 /litmus/Kconfig | |
parent | 4e8f9b7c2e9134ca31feb91dee3609a95df6de56 (diff) |
Added CONFIG_REALTIME_AUX_TASKS option
Auxillary task features were enabled by CONFIG_LITMUS_LOCKING.
Made auxillary tasks a seperate feature that depends upon
CONFIG_LITMUS_LOCKING.
Diffstat (limited to 'litmus/Kconfig')
-rw-r--r-- | litmus/Kconfig | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/litmus/Kconfig b/litmus/Kconfig index 95e0671e2aec..c5dbc4a176ae 100644 --- a/litmus/Kconfig +++ b/litmus/Kconfig | |||
@@ -34,6 +34,37 @@ config RELEASE_MASTER | |||
34 | (http://www.cs.unc.edu/~anderson/papers.html). | 34 | (http://www.cs.unc.edu/~anderson/papers.html). |
35 | Currently only supported by GSN-EDF. | 35 | Currently only supported by GSN-EDF. |
36 | 36 | ||
37 | config REALTIME_AUX_TASKS | ||
38 | bool "Real-Time Auxillary Tasks" | ||
39 | depends on LITMUS_LOCKING | ||
40 | default n | ||
41 | help | ||
42 | Adds a system call that forces all non-real-time threads in a process | ||
43 | to become auxillary real-time tasks. These tasks inherit the priority of | ||
44 | the highest-prio *BLOCKED* real-time task (non-auxillary) in the process. | ||
45 | This allows the integration of COTS code that has background helper threads | ||
46 | used primarily for message passing and synchronization. If these | ||
47 | background threads are NOT real-time scheduled, then unbounded priority | ||
48 | inversions may occur if a real-time task blocks on a non-real-time thread. | ||
49 | |||
50 | Beware of the following pitfalls: | ||
51 | 1) Auxillary threads should not be CPU intensive. They should mostly | ||
52 | block on mutexes and condition variables. Violating this will | ||
53 | likely prevent meaningful analysis. | ||
54 | 2) Since there may be more than one auxillary thread per process, | ||
55 | priority inversions may occur with respect to single-threaded | ||
56 | task models if/when one of threads are scheduled simultanously | ||
57 | with another of the same identity. | ||
58 | 3) Busy-wait deadlock is likely between normal real-time tasks and | ||
59 | auxillary tasks synchronize using _preemptive_ spinlocks that do | ||
60 | not use priority inheritance. | ||
61 | |||
62 | These pitfalls are mitgated by the fact that auxillary tasks only | ||
63 | inherit priorities from blocked tasks (Blocking signifies that the | ||
64 | blocked task _may_ be waiting on an auxillary task to perform some | ||
65 | work.). Futher, auxillary tasks without an inherited priority are | ||
66 | _always_ scheduled with a priority less than any normal real-time task!! | ||
67 | |||
37 | endmenu | 68 | endmenu |
38 | 69 | ||
39 | menu "Real-Time Synchronization" | 70 | menu "Real-Time Synchronization" |