diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-04-04 06:52:55 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-04-06 09:08:22 +0200 |
commit | 6406b693b612bc6cbb7e3d55ae48ba7c55716659 (patch) | |
tree | 9a9e25722be46841040da7edbd5bce5446edff7c /cpukit/sapi/src/chainprotected.c | |
parent | rtems: Avoid Giant lock for partitions (diff) | |
download | rtems-6406b693b612bc6cbb7e3d55ae48ba7c55716659.tar.bz2 |
score: Delete _Chain_Prepend()
This function is not used in the score.
Update #2555.
Diffstat (limited to 'cpukit/sapi/src/chainprotected.c')
-rw-r--r-- | cpukit/sapi/src/chainprotected.c | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/cpukit/sapi/src/chainprotected.c b/cpukit/sapi/src/chainprotected.c new file mode 100644 index 0000000000..ce8bc5eb39 --- /dev/null +++ b/cpukit/sapi/src/chainprotected.c @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2013, 2016 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 82178 Puchheim + * Germany + * <rtems@embedded-brains.de> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#if HAVE_CONFIG_H + #include "config.h" +#endif + +#include <rtems/chain.h> +#include <rtems/rtems/intr.h> + +RTEMS_INTERRUPT_LOCK_DEFINE( static, chain_lock, "Chains" ) + +static void chain_acquire( rtems_interrupt_lock_context *lock_context ) +{ + rtems_interrupt_lock_acquire( &chain_lock, lock_context ); +} + +static void chain_release( rtems_interrupt_lock_context *lock_context ) +{ + rtems_interrupt_lock_release( &chain_lock, lock_context ); +} + +#if defined( RTEMS_SMP ) + +void rtems_chain_extract( rtems_chain_node *node ) +{ + rtems_interrupt_lock_context lock_context; + + chain_acquire( &lock_context ); + _Chain_Extract_unprotected( node ); + chain_release( &lock_context ); +} + +rtems_chain_node *rtems_chain_get( rtems_chain_control *chain ) +{ + rtems_chain_node *node; + rtems_interrupt_lock_context lock_context; + + chain_acquire( &lock_context ); + node = _Chain_Get_unprotected( chain ); + chain_release( &lock_context ); + + return node; +} + +void rtems_chain_insert( rtems_chain_node *after_node, rtems_chain_node *node ) +{ + rtems_interrupt_lock_context lock_context; + + chain_acquire( &lock_context ); + _Chain_Insert_unprotected( after_node, node ); + chain_release( &lock_context ); +} + +void rtems_chain_append( + rtems_chain_control *chain, + rtems_chain_node *node +) +{ + rtems_interrupt_lock_context lock_context; + + chain_acquire( &lock_context ); + _Chain_Append_unprotected( chain, node ); + chain_release( &lock_context ); +} + +#endif /* defined( RTEMS_SMP ) */ + +void rtems_chain_prepend( + rtems_chain_control *chain, + rtems_chain_node *node +) +{ + rtems_interrupt_lock_context lock_context; + + chain_acquire( &lock_context ); + _Chain_Prepend_unprotected( chain, node ); + chain_release( &lock_context ); +} + +#if defined( RTEMS_SMP ) + +bool rtems_chain_append_with_empty_check( + rtems_chain_control *chain, + rtems_chain_node *node +) +{ + bool was_empty; + rtems_interrupt_lock_context lock_context; + + chain_acquire( &lock_context ); + was_empty = _Chain_Append_with_empty_check_unprotected( chain, node ); + chain_release( &lock_context ); + + return was_empty; +} + +bool rtems_chain_prepend_with_empty_check( + rtems_chain_control *chain, + rtems_chain_node *node +) +{ + bool was_empty; + rtems_interrupt_lock_context lock_context; + + chain_acquire( &lock_context ); + was_empty = _Chain_Prepend_with_empty_check_unprotected( chain, node ); + chain_release( &lock_context ); + + return was_empty; +} + +bool rtems_chain_get_with_empty_check( + rtems_chain_control *chain, + rtems_chain_node **node +) +{ + bool is_empty_now; + rtems_interrupt_lock_context lock_context; + + chain_acquire( &lock_context ); + is_empty_now = _Chain_Get_with_empty_check_unprotected( chain, node ); + chain_release( &lock_context ); + + return is_empty_now; +} + +#endif /* defined( RTEMS_SMP ) */ |