source: rtems/c/src/ada-tests/mptests/mp08/mptest.adb @ 48bfd992

4.104.114.84.95
Last change on this file since 48bfd992 was bf9ae83, checked in by Joel Sherrill <joel.sherrill@…>, on Jun 2, 1997 at 8:32:11 PM

modified copyright notice to be the same as RTEMS 4.0.0.

changed the CVS ID string to be a "development" version.

  • Property mode set to 100644
File size: 4.9 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 8 of the RTEMS
7--  Multiprocessor Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
12--
13--  COPYRIGHT (c) 1989-1997.
14--  On-Line Applications Research Corporation (OAR).
15--  Copyright assigned to U.S. Government, 1994.
16--
17--  The license and distribution terms for this file may in
18--  the file LICENSE in this distribution or at
19--  http://www.OARcorp.com/rtems/license.html.
20--
21--  $Id$
22--
23
24with INTERFACES; use INTERFACES;
25with RTEMS;
26with TEST_SUPPORT;
27with TEXT_IO;
28with UNSIGNED32_IO;
29
30package body MPTEST is
31
32   package body PER_NODE_CONFIGURATION is separate;
33
34--PAGE
35--
36--  INIT
37--
38
39   procedure INIT (
40      ARGUMENT : in     RTEMS.TASK_ARGUMENT
41   ) is
42      STATUS : RTEMS.STATUS_CODES;
43   begin
44
45      TEXT_IO.NEW_LINE( 2 );
46      TEXT_IO.PUT( "*** TEST 8 -- NODE " );
47      UNSIGNED32_IO.PUT(
48         MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
49         WIDTH => 1
50      );
51      TEXT_IO.PUT_LINE( " ***" );
52
53      MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  '1', '1', '1', ' ' );
54      MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  '2', '2', '2', ' ' );
55
56      MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME(  'S', 'E', 'M', ' ' );
57
58      if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
59
60         TEXT_IO.PUT_LINE( "Creating Semaphore(Global)" );
61
62         RTEMS.SEMAPHORE_CREATE(
63            MPTEST.SEMAPHORE_NAME( 1 ),
64            1,
65            RTEMS.GLOBAL,
66            MPTEST.SEMAPHORE_ID( 1 ),
67            STATUS
68         );
69         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
70
71      end if;
72
73      TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
74      RTEMS.TASK_CREATE( 
75         MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ), 
76         MPTEST.MULTIPROCESSING_CONFIGURATION.NODE, 
77         2048, 
78         RTEMS.TIMESLICE,
79         RTEMS.GLOBAL,
80         MPTEST.TASK_ID( 1 ),
81         STATUS
82      );
83      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
84
85      TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
86      RTEMS.TASK_START(
87         MPTEST.TASK_ID( 1 ),
88         MPTEST.TEST_TASK'ACCESS,
89         0,
90         STATUS
91      );
92      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
93
94      TEXT_IO.PUT_LINE( "Deleting initialization task" );
95      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
96      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
97
98   end INIT;
99
100--PAGE
101--
102--  TEST_TASK
103--
104
105   procedure TEST_TASK (
106      ARGUMENT : in     RTEMS.TASK_ARGUMENT
107   ) is
108      DOTS                     : RTEMS.UNSIGNED32;
109      COUNT                    : RTEMS.UNSIGNED32;
110      STATUS                   : RTEMS.STATUS_CODES;
111   begin
112
113      TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
114      loop
115
116         RTEMS.SEMAPHORE_IDENT( 
117            MPTEST.SEMAPHORE_NAME( 1 ),
118            RTEMS.SEARCH_ALL_NODES,
119            MPTEST.SEMAPHORE_ID( 1 ),
120            STATUS
121         );
122
123         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
124
125      end loop;
126
127      if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 2 then
128
129         RTEMS.SEMAPHORE_DELETE(
130            MPTEST.SEMAPHORE_ID( 1 ),
131            STATUS
132         );
133         TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
134            STATUS, 
135            RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
136            "SEMAPHORE_DELETE" 
137         );
138
139         TEXT_IO.PUT_LINE(
140            "semaphore_delete correctly returned ILLEGAL_ON_REMOTE_OBJECT"
141         );
142
143      end if;
144
145      COUNT := 0;
146
147      loop
148
149         TEST_SUPPORT.PUT_DOT( "p" );
150
151         RTEMS.SEMAPHORE_OBTAIN(
152            MPTEST.SEMAPHORE_ID( 1 ),
153            RTEMS.DEFAULT_OPTIONS,
154            RTEMS.NO_TIMEOUT,
155            STATUS
156         );
157
158         if not RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then
159
160            TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
161               STATUS, 
162               RTEMS.OBJECT_WAS_DELETED,
163               "SEMAPHORE_OBTAIN" 
164            );
165
166            TEXT_IO.NEW_LINE;
167
168            TEXT_IO.PUT_LINE( "Global semaphore deleted" );
169
170            TEXT_IO.PUT_LINE( "*** END OF TEST 8 ***" );
171
172            RTEMS.SHUTDOWN_EXECUTIVE( 0 );
173
174         end if;
175
176         COUNT := COUNT + 1;
177
178         if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 and then
179            COUNT >= 1000 then
180
181            RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
182            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
183
184            TEXT_IO.NEW_LINE;
185
186            TEXT_IO.PUT_LINE( "Deleting global semaphore" );
187
188            RTEMS.SEMAPHORE_DELETE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
189            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE" );
190
191            TEXT_IO.PUT_LINE( "*** END OF TEST 8 ***" );
192
193            RTEMS.SHUTDOWN_EXECUTIVE( 0 );
194
195         end if;
196
197         TEST_SUPPORT.PUT_DOT( "v" );
198
199         RTEMS.SEMAPHORE_RELEASE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
200
201         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
202
203      end loop;
204
205   end TEST_TASK;
206
207end MPTEST;
Note: See TracBrowser for help on using the repository browser.