Files
rtems/testsuites/sptests/spthreadq01/init.c
Sebastian Huber d7665823b2 score: Introduce Thread_queue_Heads
Move the storage for the thread queue heads to the threads.  Each thread
provides a set of thread queue heads allocated from a dedicated memory
pool.  In case a thread blocks on a queue, then it lends its heads to
the queue.  In case the thread unblocks, then it takes a free set of
threads from the queue.  Since a thread can block on at most one queue
this works.  This mechanism is used in FreeBSD.  The motivation for this
change is to reduce the memory demands of the synchronization objects.
On a 32-bit uni-processor configuration the Thread_queue_Control size is
now 8 bytes, compared to 64 bytes in RTEMS 4.10 (other changes reduced
the size as well).
2015-07-23 08:01:13 +02:00

65 lines
1.6 KiB
C

/*
* COPYRIGHT (c) 1989-2009.
* On-Line Applications Research Corporation (OAR).
*
* 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.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <tmacros.h>
#include <sys/types.h>
#include <rtems/score/threadqimpl.h>
const char rtems_test_name[] = "SPTHREADQ 1";
static Thread_queue_Control fifo_queue =
THREAD_QUEUE_FIFO_INITIALIZER( fifo_queue, "FIFO" );
static Thread_queue_Control prio_queue =
THREAD_QUEUE_PRIORITY_INITIALIZER( prio_queue, "Prio" );
static rtems_task Init(
rtems_task_argument ignored
)
{
TEST_BEGIN();
puts( "Init - _Thread_queue_Extract - thread not blocked on a thread queue" );
_Thread_Disable_dispatch();
_Thread_queue_Extract( _Thread_Executing );
_Thread_Enable_dispatch();
/* is there more to check? */
rtems_test_assert( fifo_queue.Queue.heads == NULL );
rtems_test_assert( fifo_queue.operations == &_Thread_queue_Operations_FIFO );
rtems_test_assert( prio_queue.Queue.heads == NULL );
rtems_test_assert(
prio_queue.operations == &_Thread_queue_Operations_priority
);
TEST_END();
rtems_test_exit(0);
}
/* configuration information */
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT
#include <rtems/confdefs.h>
/* global variables */