summaryrefslogtreecommitdiffstats
path: root/testsuites/mptests/mp14/smtask1.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuites/mptests/mp14/smtask1.c')
-rw-r--r--testsuites/mptests/mp14/smtask1.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/testsuites/mptests/mp14/smtask1.c b/testsuites/mptests/mp14/smtask1.c
new file mode 100644
index 0000000000..fbba4d8280
--- /dev/null
+++ b/testsuites/mptests/mp14/smtask1.c
@@ -0,0 +1,73 @@
+/* Sm_test_task
+ *
+ * This task continuously obtains and releases a global semaphore.
+ *
+ * Input parameters:
+ * argument - task argument
+ *
+ * Output parameters: NONE
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#include "system.h"
+
+extern rtems_multiprocessing_table Multiprocessing_configuration;
+
+rtems_task Semaphore_task(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 count;
+ rtems_status_code status;
+ rtems_unsigned32 yield_count;
+
+ puts( "Getting SMID of semaphore" );
+ while ( FOREVER ) {
+ status = rtems_semaphore_ident(
+ Semaphore_name[ 1 ],
+ RTEMS_SEARCH_ALL_NODES,
+ &Semaphore_id[ 1 ]
+ );
+ if ( status == RTEMS_SUCCESSFUL )
+ break;
+ puts( "rtems_semaphore_ident FAILED!!" );
+ rtems_task_wake_after(2);
+ }
+
+ yield_count = 100;
+
+ while ( Stop_Test == FALSE ) {
+
+ for ( count=SEMAPHORE_DOT_COUNT ; Stop_Test == FALSE && count ; count-- ) {
+ status = rtems_semaphore_obtain(
+ Semaphore_id[ 1 ],
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+ directive_failed( status, "rtems_semaphore_obtain" );
+
+ status = rtems_semaphore_release( Semaphore_id[ 1 ] );
+ directive_failed( status, "rtems_semaphore_release" );
+
+ if ( Stop_Test == FALSE )
+ if ( Multiprocessing_configuration.node == 1 && --yield_count == 0 ) {
+ status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
+ directive_failed( status, "rtems_task_wake_after" );
+
+ yield_count = 100;
+ }
+ }
+ put_dot( 's' );
+ }
+
+ Exit_test();
+}