source: rtems/cpukit/sapi/src/sysinitverbose.c @ ba74ebde

5
Last change on this file since ba74ebde was ba74ebde, checked in by Sebastian Huber <sebastian.huber@…>, on Feb 14, 2020 at 6:09:56 PM

libio: Add POSIX user environment pointer to TCB

The IO library used a POSIX key to store an optional POSIX user
environment pointer. This pulled in the POSIX keys support in every
application configuration. Add a user environment pointer to the thread
control block (TCB) instead. Applications which do not need the POSIX
user environment will just get an overhead of one pointer per thread.

Close #3882.

  • Property mode set to 100644
File size: 14.7 KB
Line 
1/*
2 * SPDX-License-Identifier: BSD-2-Clause
3 *
4 * Copyright (C) 2020 embedded brains GmbH
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#include <rtems/sysinit.h>
29#include <rtems/score/memory.h>
30#include <rtems/bspIo.h>
31
32#include <inttypes.h>
33
34RTEMS_LINKER_RWSET_ITEM_DECLARE(
35  _Sysinit,
36  rtems_sysinit_item,
37  _Sysinit_Verbose
38);
39
40#define SYSINIT_VERBOSE(x) \
41  static void _Sysinit_Verbose_##x( void ); \
42  RTEMS_SYSINIT_ITEM( \
43    _Sysinit_Verbose_##x, \
44    RTEMS_SYSINIT_##x, \
45    RTEMS_SYSINIT_ORDER_LAST \
46  )
47
48SYSINIT_VERBOSE( BSP_EARLY );
49SYSINIT_VERBOSE( MEMORY );
50SYSINIT_VERBOSE( DIRTY_MEMORY );
51SYSINIT_VERBOSE( ZERO_MEMORY );
52SYSINIT_VERBOSE( ISR_STACK );
53SYSINIT_VERBOSE( PER_CPU_DATA );
54SYSINIT_VERBOSE( SBRK );
55SYSINIT_VERBOSE( WORKSPACE );
56SYSINIT_VERBOSE( MALLOC );
57SYSINIT_VERBOSE( BSP_START );
58SYSINIT_VERBOSE( CPU_COUNTER );
59SYSINIT_VERBOSE( INITIAL_EXTENSIONS );
60SYSINIT_VERBOSE( MP_EARLY );
61SYSINIT_VERBOSE( DATA_STRUCTURES );
62SYSINIT_VERBOSE( MP );
63SYSINIT_VERBOSE( USER_EXTENSIONS );
64SYSINIT_VERBOSE( CLASSIC_TASKS );
65SYSINIT_VERBOSE( CLASSIC_TASKS_MP );
66SYSINIT_VERBOSE( CLASSIC_TIMER );
67SYSINIT_VERBOSE( CLASSIC_SIGNAL_MP );
68SYSINIT_VERBOSE( CLASSIC_EVENT_MP );
69SYSINIT_VERBOSE( CLASSIC_MESSAGE_QUEUE );
70SYSINIT_VERBOSE( CLASSIC_MESSAGE_QUEUE_MP );
71SYSINIT_VERBOSE( CLASSIC_SEMAPHORE );
72SYSINIT_VERBOSE( CLASSIC_SEMAPHORE_MP );
73SYSINIT_VERBOSE( CLASSIC_PARTITION );
74SYSINIT_VERBOSE( CLASSIC_PARTITION_MP );
75SYSINIT_VERBOSE( CLASSIC_REGION );
76SYSINIT_VERBOSE( CLASSIC_DUAL_PORTED_MEMORY );
77SYSINIT_VERBOSE( CLASSIC_RATE_MONOTONIC );
78SYSINIT_VERBOSE( CLASSIC_BARRIER );
79SYSINIT_VERBOSE( POSIX_SIGNALS );
80SYSINIT_VERBOSE( POSIX_THREADS );
81SYSINIT_VERBOSE( POSIX_MESSAGE_QUEUE );
82SYSINIT_VERBOSE( POSIX_SEMAPHORE );
83SYSINIT_VERBOSE( POSIX_TIMER );
84SYSINIT_VERBOSE( POSIX_SHM );
85SYSINIT_VERBOSE( POSIX_KEYS );
86SYSINIT_VERBOSE( POSIX_CLEANUP );
87SYSINIT_VERBOSE( IDLE_THREADS );
88SYSINIT_VERBOSE( LIBIO );
89SYSINIT_VERBOSE( USER_ENVIRONMENT );
90SYSINIT_VERBOSE( ROOT_FILESYSTEM );
91SYSINIT_VERBOSE( DRVMGR );
92SYSINIT_VERBOSE( MP_SERVER );
93SYSINIT_VERBOSE( BSP_PRE_DRIVERS );
94SYSINIT_VERBOSE( DRVMGR_LEVEL_1 );
95SYSINIT_VERBOSE( DEVICE_DRIVERS );
96SYSINIT_VERBOSE( DRVMGR_LEVEL_2 );
97SYSINIT_VERBOSE( DRVMGR_LEVEL_3 );
98SYSINIT_VERBOSE( DRVMGR_LEVEL_4 );
99SYSINIT_VERBOSE( MP_FINALIZE );
100SYSINIT_VERBOSE( CLASSIC_USER_TASKS );
101SYSINIT_VERBOSE( POSIX_USER_THREADS );
102SYSINIT_VERBOSE( STD_FILE_DESCRIPTORS );
103SYSINIT_VERBOSE( LAST );
104
105static bool _Sysinit_Verbose_is_adjacent(
106  const rtems_sysinit_item *a,
107  const rtems_sysinit_item *b
108)
109{
110  RTEMS_OBFUSCATE_VARIABLE( a );
111  RTEMS_OBFUSCATE_VARIABLE( b );
112
113  return a + 1 == b;
114}
115
116#define SYSINIT_IS_ADJACENT( x, y ) \
117  _Sysinit_Verbose_is_adjacent( \
118    &_Linker_set__Sysinit__Sysinit_Verbose_##x, \
119    &_Linker_set__Sysinit__Sysinit_Verbose_##y \
120  )
121
122static void _Sysinit_Print_free_memory( void )
123{
124  const Memory_Information *mem;
125  size_t                    i;
126
127  mem = _Memory_Get();
128
129  for ( i = 0; i < _Memory_Get_count( mem ); ++i ) {
130    const Memory_Area *area;
131
132    area = _Memory_Get_area( mem, i );
133    printk(
134      "sysinit: memory area %zu: free begin = 0x%08" PRIxPTR
135        ", free size = 0x%08" PRIxPTR "\n",
136      i,
137      (uintptr_t) _Memory_Get_free_begin( area ),
138      _Memory_Get_free_size( area )
139    );
140  }
141}
142
143void _Sysinit_Verbose( void )
144{
145  printk( "sysinit: begin\n" );
146}
147
148static void _Sysinit_Verbose_BSP_EARLY( void )
149{
150  if (
151    !_Sysinit_Verbose_is_adjacent(
152      &_Linker_set__Sysinit__Sysinit_Verbose,
153      &_Linker_set__Sysinit__Sysinit_Verbose_BSP_EARLY
154    )
155  ) {
156    printk( "sysinit: BSP early: done\n" );
157  }
158}
159
160static void _Sysinit_Verbose_MEMORY( void )
161{
162  const Memory_Information *mem;
163  size_t                    i;
164
165  if ( !SYSINIT_IS_ADJACENT( BSP_EARLY, MEMORY ) ) {
166    printk( "sysinit: memory: done\n" );
167  }
168
169  printk(
170    "sysinit: stack pointer: 0x%08" PRIxPTR "\n",
171    (uintptr_t) __builtin_frame_address( 0 )
172  );
173
174  mem = _Memory_Get();
175
176  for ( i = 0; i < _Memory_Get_count( mem ); ++i ) {
177    const Memory_Area *area;
178
179    area = _Memory_Get_area( mem, i );
180    printk(
181      "sysinit: memory area %zu: begin = 0x%08" PRIxPTR
182        ", size = 0x%08" PRIxPTR "\n",
183      i,
184      (uintptr_t) _Memory_Get_begin( area ),
185      _Memory_Get_size( area )
186    );
187  }
188}
189
190static void _Sysinit_Verbose_DIRTY_MEMORY( void )
191{
192  if ( !SYSINIT_IS_ADJACENT( BSP_EARLY, DIRTY_MEMORY ) ) {
193    printk( "sysinit: DIRTY_MEMORY: done\n" );
194  }
195}
196
197static void _Sysinit_Verbose_ZERO_MEMORY( void )
198{
199  if ( !SYSINIT_IS_ADJACENT( DIRTY_MEMORY, ZERO_MEMORY ) ) {
200    printk( "sysinit: ZERO_MEMORY: done\n" );
201  }
202}
203
204static void _Sysinit_Verbose_ISR_STACK( void )
205{
206  if ( !SYSINIT_IS_ADJACENT( ZERO_MEMORY, ISR_STACK ) ) {
207    printk( "sysinit: ISR_STACK: done\n" );
208  }
209}
210
211static void _Sysinit_Verbose_PER_CPU_DATA( void )
212{
213  if ( !SYSINIT_IS_ADJACENT( ISR_STACK, PER_CPU_DATA ) ) {
214    _Sysinit_Print_free_memory();
215    printk( "sysinit: PER_CPU_DATA: done\n" );
216  }
217}
218
219static void _Sysinit_Verbose_SBRK( void )
220{
221  if ( !SYSINIT_IS_ADJACENT( PER_CPU_DATA, SBRK ) ) {
222    _Sysinit_Print_free_memory();
223    printk( "sysinit: SBRK: done\n" );
224  }
225}
226
227static void _Sysinit_Verbose_WORKSPACE( void )
228{
229  if ( !SYSINIT_IS_ADJACENT( SBRK, WORKSPACE ) ) {
230    _Sysinit_Print_free_memory();
231    printk( "sysinit: WORKSPACE: done\n" );
232  }
233}
234
235static void _Sysinit_Verbose_MALLOC( void )
236{
237  if ( !SYSINIT_IS_ADJACENT( WORKSPACE, MALLOC ) ) {
238    _Sysinit_Print_free_memory();
239    printk( "sysinit: MALLOC: done\n" );
240  }
241}
242
243static void _Sysinit_Verbose_BSP_START( void )
244{
245  if ( !SYSINIT_IS_ADJACENT( MALLOC, BSP_START ) ) {
246    printk( "sysinit: BSP_START: done\n" );
247  }
248}
249
250static void _Sysinit_Verbose_CPU_COUNTER( void )
251{
252  if ( !SYSINIT_IS_ADJACENT( BSP_START, CPU_COUNTER ) ) {
253    printk( "sysinit: CPU_COUNTER: done\n" );
254  }
255}
256
257static void _Sysinit_Verbose_INITIAL_EXTENSIONS( void )
258{
259  if ( !SYSINIT_IS_ADJACENT( CPU_COUNTER, INITIAL_EXTENSIONS ) ) {
260    printk( "sysinit: INITIAL_EXTENSIONS: done\n" );
261  }
262}
263
264static void _Sysinit_Verbose_MP_EARLY( void )
265{
266  if ( !SYSINIT_IS_ADJACENT( INITIAL_EXTENSIONS, MP_EARLY ) ) {
267    printk( "sysinit: MP_EARLY: done\n" );
268  }
269}
270
271static void _Sysinit_Verbose_DATA_STRUCTURES( void )
272{
273  if ( !SYSINIT_IS_ADJACENT( MP_EARLY, DATA_STRUCTURES ) ) {
274    printk( "sysinit: DATA_STRUCTURES: done\n" );
275  }
276}
277
278static void _Sysinit_Verbose_MP( void )
279{
280  if ( !SYSINIT_IS_ADJACENT( DATA_STRUCTURES, MP ) ) {
281    printk( "sysinit: MP: done\n" );
282  }
283}
284
285static void _Sysinit_Verbose_USER_EXTENSIONS( void )
286{
287  if ( !SYSINIT_IS_ADJACENT( MP, USER_EXTENSIONS ) ) {
288    printk( "sysinit: USER_EXTENSIONS: done\n" );
289  }
290}
291
292static void _Sysinit_Verbose_CLASSIC_TASKS( void )
293{
294  if ( !SYSINIT_IS_ADJACENT( CLASSIC_USER_TASKS, CLASSIC_TASKS ) ) {
295    printk( "sysinit: CLASSIC_TASKS: done\n" );
296  }
297}
298
299static void _Sysinit_Verbose_CLASSIC_TASKS_MP( void )
300{
301  if ( !SYSINIT_IS_ADJACENT( CLASSIC_TASKS, CLASSIC_TASKS_MP ) ) {
302    printk( "sysinit: CLASSIC_TASKS_MP: done\n" );
303  }
304}
305
306static void _Sysinit_Verbose_CLASSIC_TIMER( void )
307{
308  if ( !SYSINIT_IS_ADJACENT( CLASSIC_TASKS_MP, CLASSIC_TIMER ) ) {
309    printk( "sysinit: CLASSIC_TIMER: done\n" );
310  }
311}
312
313static void _Sysinit_Verbose_CLASSIC_SIGNAL_MP( void )
314{
315  if ( !SYSINIT_IS_ADJACENT( CLASSIC_TIMER, CLASSIC_SIGNAL_MP ) ) {
316    printk( "sysinit: CLASSIC_SIGNAL_MP: done\n" );
317  }
318}
319
320static void _Sysinit_Verbose_CLASSIC_EVENT_MP( void )
321{
322  if ( !SYSINIT_IS_ADJACENT( CLASSIC_SIGNAL_MP, CLASSIC_EVENT_MP ) ) {
323    printk( "sysinit: CLASSIC_EVENT_MP: done\n" );
324  }
325}
326
327static void _Sysinit_Verbose_CLASSIC_MESSAGE_QUEUE( void )
328{
329  if ( !SYSINIT_IS_ADJACENT( CLASSIC_EVENT_MP, CLASSIC_MESSAGE_QUEUE ) ) {
330    printk( "sysinit: CLASSIC_MESSAGE_QUEUE: done\n" );
331  }
332}
333
334static void _Sysinit_Verbose_CLASSIC_MESSAGE_QUEUE_MP( void )
335{
336  if ( !SYSINIT_IS_ADJACENT( CLASSIC_MESSAGE_QUEUE, CLASSIC_MESSAGE_QUEUE_MP ) ) {
337    printk( "sysinit: CLASSIC_MESSAGE_QUEUE_MP: done\n" );
338  }
339}
340
341static void _Sysinit_Verbose_CLASSIC_SEMAPHORE( void )
342{
343  if ( !SYSINIT_IS_ADJACENT( CLASSIC_MESSAGE_QUEUE_MP, CLASSIC_SEMAPHORE ) ) {
344    printk( "sysinit: CLASSIC_SEMAPHORE: done\n" );
345  }
346}
347
348static void _Sysinit_Verbose_CLASSIC_SEMAPHORE_MP( void )
349{
350  if ( !SYSINIT_IS_ADJACENT( CLASSIC_SEMAPHORE, CLASSIC_SEMAPHORE_MP ) ) {
351    printk( "sysinit: CLASSIC_SEMAPHORE_MP: done\n" );
352  }
353}
354
355static void _Sysinit_Verbose_CLASSIC_PARTITION( void )
356{
357  if ( !SYSINIT_IS_ADJACENT( CLASSIC_SEMAPHORE_MP, CLASSIC_PARTITION ) ) {
358    printk( "sysinit: CLASSIC_PARTITION: done\n" );
359  }
360}
361
362static void _Sysinit_Verbose_CLASSIC_PARTITION_MP( void )
363{
364  if ( !SYSINIT_IS_ADJACENT( CLASSIC_PARTITION, CLASSIC_PARTITION_MP ) ) {
365    printk( "sysinit: CLASSIC_PARTITION_MP: done\n" );
366  }
367}
368
369static void _Sysinit_Verbose_CLASSIC_REGION( void )
370{
371  if ( !SYSINIT_IS_ADJACENT( CLASSIC_PARTITION_MP, CLASSIC_REGION ) ) {
372    printk( "sysinit: CLASSIC_REGION: done\n" );
373  }
374}
375
376static void _Sysinit_Verbose_CLASSIC_DUAL_PORTED_MEMORY( void )
377{
378  if ( !SYSINIT_IS_ADJACENT( CLASSIC_REGION, CLASSIC_DUAL_PORTED_MEMORY ) ) {
379    printk( "sysinit: CLASSIC_DUAL_PORTED_MEMORY: done\n" );
380  }
381}
382
383static void _Sysinit_Verbose_CLASSIC_RATE_MONOTONIC( void )
384{
385  if (
386    !SYSINIT_IS_ADJACENT(
387      CLASSIC_DUAL_PORTED_MEMORY,
388      CLASSIC_RATE_MONOTONIC
389    )
390  ) {
391    printk( "sysinit: CLASSIC_RATE_MONOTONIC: done\n" );
392  }
393}
394
395static void _Sysinit_Verbose_CLASSIC_BARRIER( void )
396{
397  if ( !SYSINIT_IS_ADJACENT( CLASSIC_RATE_MONOTONIC, CLASSIC_BARRIER ) ) {
398    printk( "sysinit: CLASSIC_BARRIER: done\n" );
399  }
400}
401
402static void _Sysinit_Verbose_POSIX_SIGNALS( void )
403{
404  if ( !SYSINIT_IS_ADJACENT( CLASSIC_BARRIER, POSIX_SIGNALS ) ) {
405    printk( "sysinit: POSIX_SIGNALS: done\n" );
406  }
407}
408
409static void _Sysinit_Verbose_POSIX_THREADS( void )
410{
411  if ( !SYSINIT_IS_ADJACENT( POSIX_SIGNALS, POSIX_THREADS ) ) {
412    printk( "sysinit: POSIX_THREADS: done\n" );
413  }
414}
415
416static void _Sysinit_Verbose_POSIX_MESSAGE_QUEUE( void )
417{
418  if ( !SYSINIT_IS_ADJACENT( POSIX_THREADS, POSIX_MESSAGE_QUEUE ) ) {
419    printk( "sysinit: POSIX_MESSAGE_QUEUE: done\n" );
420  }
421}
422
423static void _Sysinit_Verbose_POSIX_SEMAPHORE( void )
424{
425  if ( !SYSINIT_IS_ADJACENT( POSIX_MESSAGE_QUEUE, POSIX_SEMAPHORE ) ) {
426    printk( "sysinit: POSIX_SEMAPHORE: done\n" );
427  }
428}
429
430static void _Sysinit_Verbose_POSIX_TIMER( void )
431{
432  if ( !SYSINIT_IS_ADJACENT( POSIX_SEMAPHORE, POSIX_TIMER ) ) {
433    printk( "sysinit: POSIX_TIMER: done\n" );
434  }
435}
436
437static void _Sysinit_Verbose_POSIX_SHM( void )
438{
439  if ( !SYSINIT_IS_ADJACENT( POSIX_TIMER, POSIX_SHM ) ) {
440    printk( "sysinit: POSIX_SHM: done\n" );
441  }
442}
443
444static void _Sysinit_Verbose_POSIX_KEYS( void )
445{
446  if ( !SYSINIT_IS_ADJACENT( POSIX_SHM, POSIX_KEYS ) ) {
447    printk( "sysinit: POSIX_KEYS: done\n" );
448  }
449}
450
451static void _Sysinit_Verbose_POSIX_CLEANUP( void )
452{
453  if ( !SYSINIT_IS_ADJACENT( POSIX_KEYS, POSIX_CLEANUP ) ) {
454    printk( "sysinit: POSIX_CLEANUP: done\n" );
455  }
456}
457
458static void _Sysinit_Verbose_IDLE_THREADS( void )
459{
460  if ( !SYSINIT_IS_ADJACENT( POSIX_CLEANUP, IDLE_THREADS ) ) {
461    printk( "sysinit: IDLE_THREADS: done\n" );
462  }
463}
464
465static void _Sysinit_Verbose_LIBIO( void )
466{
467  if ( !SYSINIT_IS_ADJACENT( IDLE_THREADS, LIBIO ) ) {
468    printk( "sysinit: LIBIO: done\n" );
469  }
470}
471
472static void _Sysinit_Verbose_USER_ENVIRONMENT( void )
473{
474  if ( !SYSINIT_IS_ADJACENT( LIBIO, USER_ENVIRONMENT ) ) {
475    printk( "sysinit: USER_ENVIRONMENT: done\n" );
476  }
477}
478
479static void _Sysinit_Verbose_ROOT_FILESYSTEM( void )
480{
481  if ( !SYSINIT_IS_ADJACENT( USER_ENVIRONMENT, ROOT_FILESYSTEM ) ) {
482    printk( "sysinit: ROOT_FILESYSTEM: done\n" );
483  }
484}
485
486static void _Sysinit_Verbose_DRVMGR( void )
487{
488  if ( !SYSINIT_IS_ADJACENT( ROOT_FILESYSTEM, DRVMGR ) ) {
489    printk( "sysinit: DRVMGR: done\n" );
490  }
491}
492
493static void _Sysinit_Verbose_MP_SERVER( void )
494{
495  if ( !SYSINIT_IS_ADJACENT( DRVMGR, MP_SERVER ) ) {
496    printk( "sysinit: MP_SERVER: done\n" );
497  }
498}
499
500static void _Sysinit_Verbose_BSP_PRE_DRIVERS( void )
501{
502  if ( !SYSINIT_IS_ADJACENT( MP_SERVER, BSP_PRE_DRIVERS ) ) {
503    printk( "sysinit: BSP_PRE_DRIVERS: done\n" );
504  }
505}
506
507static void _Sysinit_Verbose_DRVMGR_LEVEL_1( void )
508{
509  if ( !SYSINIT_IS_ADJACENT( BSP_PRE_DRIVERS, DRVMGR_LEVEL_1 ) ) {
510    printk( "sysinit: DRVMGR_LEVEL_1: done\n" );
511  }
512}
513
514static void _Sysinit_Verbose_DEVICE_DRIVERS( void )
515{
516  if ( !SYSINIT_IS_ADJACENT( DRVMGR_LEVEL_1, DEVICE_DRIVERS ) ) {
517    printk( "sysinit: DEVICE_DRIVERS: done\n" );
518  }
519}
520
521static void _Sysinit_Verbose_DRVMGR_LEVEL_2( void )
522{
523  if ( !SYSINIT_IS_ADJACENT( DEVICE_DRIVERS, DRVMGR_LEVEL_2 ) ) {
524    printk( "sysinit: DRVMGR_LEVEL_2: done\n" );
525  }
526}
527
528static void _Sysinit_Verbose_DRVMGR_LEVEL_3( void )
529{
530  if ( !SYSINIT_IS_ADJACENT( DRVMGR_LEVEL_2, DRVMGR_LEVEL_3 ) ) {
531    printk( "sysinit: DRVMGR_LEVEL_3: done\n" );
532  }
533}
534
535static void _Sysinit_Verbose_DRVMGR_LEVEL_4( void )
536{
537  if ( !SYSINIT_IS_ADJACENT( DRVMGR_LEVEL_3, DRVMGR_LEVEL_4 ) ) {
538    printk( "sysinit: DRVMGR_LEVEL_4: done\n" );
539  }
540}
541
542static void _Sysinit_Verbose_MP_FINALIZE( void )
543{
544  if ( !SYSINIT_IS_ADJACENT( DRVMGR_LEVEL_4, MP_FINALIZE ) ) {
545    printk( "sysinit: MP_FINALIZE: done\n" );
546  }
547}
548
549static void _Sysinit_Verbose_CLASSIC_USER_TASKS( void )
550{
551  if ( !SYSINIT_IS_ADJACENT( MP_FINALIZE, CLASSIC_USER_TASKS ) ) {
552    printk( "sysinit: CLASSIC_USER_TASKS: done\n" );
553  }
554}
555
556static void _Sysinit_Verbose_POSIX_USER_THREADS( void )
557{
558  if ( !SYSINIT_IS_ADJACENT( CLASSIC_USER_TASKS, POSIX_USER_THREADS ) ) {
559    printk( "sysinit: POSIX_USER_THREADS: done\n" );
560  }
561}
562
563static void _Sysinit_Verbose_STD_FILE_DESCRIPTORS( void )
564{
565  if ( !SYSINIT_IS_ADJACENT( POSIX_USER_THREADS, STD_FILE_DESCRIPTORS ) ) {
566    printk( "sysinit: STD_FILE_DESCRIPTORS: done\n" );
567  }
568}
569
570static void _Sysinit_Verbose_LAST( void )
571{
572  printk( "sysinit: done\n" );
573}
Note: See TracBrowser for help on using the repository browser.