summaryrefslogtreecommitdiffstats
path: root/cpukit/sapi/src/chainprotected.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-04-04 06:52:55 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-04-06 09:08:22 +0200
commit6406b693b612bc6cbb7e3d55ae48ba7c55716659 (patch)
tree9a9e25722be46841040da7edbd5bce5446edff7c /cpukit/sapi/src/chainprotected.c
parentrtems: Avoid Giant lock for partitions (diff)
downloadrtems-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.c139
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 ) */