diff packages/kernel/current/cdl/synch.cdl @ 115:6ed91473a1cd ecos-sw-2000-08-21

Merge from eCos master repository on 2000-08-21-22:40:54-BST
author jlarmour
date Fri, 25 Aug 2000 17:32:38 +0000
parents 435cced73e2f
children 0ae0bc38e387
line wrap: on
line diff
--- a/packages/kernel/current/cdl/synch.cdl
+++ b/packages/kernel/current/cdl/synch.cdl
@@ -40,33 +40,94 @@
 #
 # ====================================================================
 
-# NOTE: the requires statement is only valid for the current kernel.
-# Priority inheritance is possible in other schedulers as well
-# but is not yet implemented.
-cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INHERITANCE_SIMPLE {
-    display       "Simple mutex priority inheritance"
-    requires      CYGSEM_KERNEL_SCHED_MLQUEUE
-    default_value 1
-    description   "
-        This option enables a relatively simple implementation of
-        mutex priority inheritance. The implementation will only work
-        in the mlqueue scheduler, and it does not handle the rare
-        case of nested mutexes completely correctly. However it is
-        both fast and deterministic. Mutex priority inheritance can
-        be disabled if the application does not require it, which
-        will reduce both code size and data space."
-}
+
+cdl_component CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL {
+    display      "Priority inversion protection protocols"
+    flavor       booldata
+    legal_values { "SIMPLE" }
+    default_value { "SIMPLE" }
+    active_if    { CYGSEM_KERNEL_SCHED_MLQUEUE }
+    description "
+        This component controls the protocols used to protect mutexes against
+        priority inversion. If this option is enabled it defines which
+        algorithm is used to implement this protection. At present only
+        one such algorithm is defined: \"SIMPLE\". The implementation
+        will only work in the mlqueue scheduler, and it does not handle the
+        rare case of nested mutexes completely correctly. However it is
+        both fast and deterministic."
+
+    cdl_option  CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_INHERIT {
+	display       "Enable priority inheritance protocol"
+	default_value 1
+	implements CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT
+	description   "
+	    This option enables priority inheritance protocol. This protocol
+	    causes the owner of a mutex to be executed at the highest priority
+	    of the threads waiting for access to the mutex."
+    }
+
+    cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING {
+	display       "Enable priority ceiling protocol"
+	default_value 1
+	implements CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT	
+	description   "
+	    This option enables priority ceiling protocol. This protocol
+	    causes the owner of a mutex to be executed at a  priority
+	    associated with the mutex."
+    }
 
-cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INHERITANCE_SIMPLE_RELAY {
-    display    "Relay enhancement to simple mutex priority inheritance"
-    active_if	CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INHERITANCE_SIMPLE
-    default_value 1
-    description   "
-        This option enables an extension to the simple implementation of
-        mutex priority inheritance whereby a thread releasing a mutex to a
-        waiting thread relays its own priority to the new owner if there
-        are still further threads waiting.  This can be viewed as a
-        discovered priority ceiling."
+    cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_NONE {
+	display       "No priority inversion protocol"
+	default_value 1
+	implements CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT	
+	description   "
+	    This option enables the ability to have no priority inversion protocol.
+	    It is equivalent to disabling the priority inversion protocol at
+	    the top level, but is necessary for the runtime and default
+	    selection options."
+    }
+
+    cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DEFAULT {
+	display      "Default priority inversion protocol"
+	flavor       data
+	legal_values { "INHERIT" "CEILING" "NONE" }
+	default_value { CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_INHERIT ?
+                        "INHERIT" :
+                        CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING ?
+                        "CEILING" : "NONE" }
+	description   "
+	    This option defines the default inversion protocol used for mutexes that
+	    are created without an explicit protocol being specified. The protocol
+	    chosen by default is to use priority inheritance if it is present otherwise
+	    priority ceiling, or none if neither is present."
+    }
+
+    cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DEFAULT_PRIORITY {
+	display       "Default priority ceiling"
+	flavor        data
+	legal_values  0 to { CYGNUM_KERNEL_SCHED_PRIORITIES - 1 }
+	default_value 0
+	active_if     { CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DEFAULT == "CEILING" }
+	description   "
+	    This option defines the default priority ceiling to be
+	    used if the chosen default priority inversion protocol is
+	    priority ceiling protocol. The default value for this is zero,
+	    making all such mutexes boost threads to the maximum priority."
+    }
+
+    cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DYNAMIC {
+	display        "Specify mutex priority inversion protocol at runtime"
+	default_value  1
+	active_if      { CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT > 1 }
+	description    "
+	    This option controls whether the priority inversion protocol used by
+	    a mutex can be specified when that mutex is created."
+    }
+    
+    cdl_interface CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT {
+	display      "Number of protocols selected"
+    }
+    
 }
 
 cdl_option CYGMFN_KERNEL_SYNCH_MBOXT_PUT_CAN_WAIT {
@@ -109,3 +170,15 @@ cdl_option CYGMFN_KERNEL_SYNCH_CONDVAR_T
         This option enables the condition variable timed wait
         facility."
 }
+
+cdl_option CYGMFN_KERNEL_SYNCH_CONDVAR_WAIT_MUTEX {
+    display       "Condition variable explicit mutex wait support"
+    default_value 1
+    description   "
+        This option enables the condition variable explicit mutex wait
+        facility. By default condition variables in eCos are created with
+        a statically associated mutex. This option permits wait (and timed wait
+        if CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT is enabled) to provide a
+        different mutex as an argument. This makes no difference to the semantics
+        the wait operation except that a different mutex will be used during it."
+}