diff options
Diffstat (limited to 'testsuites/mptests/mp14/pttask1.c')
-rw-r--r-- | testsuites/mptests/mp14/pttask1.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/testsuites/mptests/mp14/pttask1.c b/testsuites/mptests/mp14/pttask1.c new file mode 100644 index 0000000000..f2ab42f0cd --- /dev/null +++ b/testsuites/mptests/mp14/pttask1.c @@ -0,0 +1,71 @@ +/* Partition_task + * + * This task continuously gets a buffer from and returns that buffer + * to a global partition. + * + * 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 Partition_task( + rtems_task_argument argument +) +{ + rtems_unsigned32 count; + rtems_status_code status; + rtems_unsigned32 yield_count; + void *buffer; + + puts( "Getting ID of partition" ); + while ( FOREVER ) { + status = rtems_partition_ident( + Partition_name[ 1 ], + RTEMS_SEARCH_ALL_NODES, + &Partition_id[ 1 ] + ); + + if ( status == RTEMS_SUCCESSFUL ) + break; + + puts( "rtems_partition_ident FAILED!!" ); + rtems_task_wake_after(2); + } + + yield_count = 100; + + while ( Stop_Test == FALSE ) { + for ( count=PARTITION_DOT_COUNT ; Stop_Test == FALSE && count ; count-- ) { + status = rtems_partition_get_buffer( Partition_id[ 1 ], &buffer ); + directive_failed( status, "rtems_partition_get_buffer" ); + + status = rtems_partition_return_buffer( Partition_id[ 1 ], buffer ); + directive_failed( status, "rtems_partition_return_buffer" ); + + if (Stop_Test == FALSE) + if ( Multiprocessing_configuration.node == 1 && --yield_count == 0 ) { + status = rtems_task_wake_after( 1 ); + directive_failed( status, "rtems_task_wake_after" ); + yield_count = 100; + } + } + put_dot( 'p' ); + } + + Exit_test(); +} |