Mercurial > flash_v2
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." +}
