From 46231e13303196ca65bbe21c624eb6d5663739bc Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 14 Dec 2011 13:18:01 +0000 Subject: 2011-12-14 Sebastian Huber PR 1924/cpukit * spstkalloc02/.cvsignore, spstkalloc02/Makefile.am, spstkalloc02/init.c, spstkalloc02/spstkalloc02.doc, spstkalloc02/spstkalloc02.scn: New files. * Makefile.am, configure.ac: Reflect changes above. --- testsuites/sptests/ChangeLog | 8 ++ testsuites/sptests/Makefile.am | 2 +- testsuites/sptests/configure.ac | 1 + testsuites/sptests/spstkalloc02/.cvsignore | 2 + testsuites/sptests/spstkalloc02/Makefile.am | 26 ++++ testsuites/sptests/spstkalloc02/init.c | 162 +++++++++++++++++++++++ testsuites/sptests/spstkalloc02/spstkalloc02.doc | 19 +++ testsuites/sptests/spstkalloc02/spstkalloc02.scn | 6 + 8 files changed, 225 insertions(+), 1 deletion(-) create mode 100644 testsuites/sptests/spstkalloc02/.cvsignore create mode 100644 testsuites/sptests/spstkalloc02/Makefile.am create mode 100644 testsuites/sptests/spstkalloc02/init.c create mode 100644 testsuites/sptests/spstkalloc02/spstkalloc02.doc create mode 100644 testsuites/sptests/spstkalloc02/spstkalloc02.scn (limited to 'testsuites') diff --git a/testsuites/sptests/ChangeLog b/testsuites/sptests/ChangeLog index 49a7310458..af4074d8b1 100644 --- a/testsuites/sptests/ChangeLog +++ b/testsuites/sptests/ChangeLog @@ -1,3 +1,11 @@ +2011-12-14 Sebastian Huber + + PR 1924/cpukit + * spstkalloc02/.cvsignore, spstkalloc02/Makefile.am, + spstkalloc02/init.c, spstkalloc02/spstkalloc02.doc, + spstkalloc02/spstkalloc02.scn: New files. + * Makefile.am, configure.ac: Reflect changes above. + 2011-12-13 Ralf Corsépius * sp31/task1.c: Make Do_nothing static. diff --git a/testsuites/sptests/Makefile.am b/testsuites/sptests/Makefile.am index 24775cd75d..5cb24d1eba 100644 --- a/testsuites/sptests/Makefile.am +++ b/testsuites/sptests/Makefile.am @@ -17,7 +17,7 @@ SUBDIRS = \ sp70 sp71 sp72 sp73 sp74 sp75 sp76 sp2038 \ spassoc01 spchain spclockget spcoverage spobjgetnext \ spnotepad01 spprintk spprivenv01 sprbtree01 spsize spstkalloc \ - spthreadq01 spwatchdog spwkspace \ + spstkalloc02 spthreadq01 spwatchdog spwkspace \ sperror01 sperror02 sperror03 \ spfatal01 spfatal02 spfatal03 spfatal04 spfatal05 spfatal06 spfatal07 \ spfatal08 spfatal09 spfatal10 spfatal11 spfatal12 spfatal13 spfatal14 \ diff --git a/testsuites/sptests/configure.ac b/testsuites/sptests/configure.ac index e1830d8c49..bf79928a25 100644 --- a/testsuites/sptests/configure.ac +++ b/testsuites/sptests/configure.ac @@ -180,6 +180,7 @@ spsimplesched02/Makefile spsimplesched03/Makefile spsize/Makefile spstkalloc/Makefile +spstkalloc02/Makefile spthreadq01/Makefile spwatchdog/Makefile spwkspace/Makefile diff --git a/testsuites/sptests/spstkalloc02/.cvsignore b/testsuites/sptests/spstkalloc02/.cvsignore new file mode 100644 index 0000000000..282522db03 --- /dev/null +++ b/testsuites/sptests/spstkalloc02/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/testsuites/sptests/spstkalloc02/Makefile.am b/testsuites/sptests/spstkalloc02/Makefile.am new file mode 100644 index 0000000000..5058d34bae --- /dev/null +++ b/testsuites/sptests/spstkalloc02/Makefile.am @@ -0,0 +1,26 @@ +## +## $Id$ +## + + +rtems_tests_PROGRAMS = spstkalloc02 +spstkalloc02_SOURCES = init.c + +dist_rtems_tests_DATA = spstkalloc02.scn +dist_rtems_tests_DATA += spstkalloc02.doc + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + + +AM_CPPFLAGS += -I$(top_srcdir)/../support/include + +LINK_OBJS = $(spstkalloc02_OBJECTS) +LINK_LIBS = $(spstkalloc02_LDLIBS) + +spstkalloc02$(EXEEXT): $(spstkalloc02_OBJECTS) $(spstkalloc02_DEPENDENCIES) + @rm -f spstkalloc02$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/sptests/spstkalloc02/init.c b/testsuites/sptests/spstkalloc02/init.c new file mode 100644 index 0000000000..267cd5c4be --- /dev/null +++ b/testsuites/sptests/spstkalloc02/init.c @@ -0,0 +1,162 @@ +/** + * @file + * + * @ingroup sptests + * + * @brief Test that the task stack allocator works. + */ + +/* + * Copyright (c) 2011 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Obere Lagerstr. 30 + * 82178 Puchheim + * Germany + * + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include + +#include +#include + +#include + +#define TASK_COUNT 5 + +#define PAGE_SIZE 1024 + +static Heap_Control task_stack_heap; + +static void task_stack_init(size_t stack_space_size); + +static void *task_stack_allocate(size_t stack_size); + +static void task_stack_free(void *addr); + +static void print_info(void) +{ + Heap_Information_block info; + + _Heap_Get_information(&task_stack_heap, &info); + + printf( + "used blocks = %" PRIu32 ", " + "largest used block = %" PRIu32 ", " + "used space = %" PRIu32 "\n" + "free blocks = %" PRIu32 ", " + "largest free block = %" PRIu32 ", " + "free space = %" PRIu32 "\n", + info.Used.number, + info.Used.largest, + info.Used.total, + info.Free.number, + info.Free.largest, + info.Free.total + ); +} + +static rtems_task Init(rtems_task_argument argument) +{ + rtems_status_code sc = RTEMS_SUCCESSFUL; + rtems_name name = rtems_build_name('S', 'T', 'K', 'A'); + rtems_id id = RTEMS_ID_NONE; + int i = 0; + + puts("\n\n*** POSIX TEST STKALLOC 02 ***"); + + print_info(); + + for (i = 2; i < TASK_COUNT; ++i) { + sc = rtems_task_create( + name, + RTEMS_MINIMUM_PRIORITY, + RTEMS_MINIMUM_STACK_SIZE, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &id + ); + directive_failed(sc, "rtems_task_create"); + } + + sc = rtems_task_create( + name, + RTEMS_MINIMUM_PRIORITY, + 2 * RTEMS_MINIMUM_STACK_SIZE, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &id + ); + fatal_directive_status(sc, RTEMS_UNSATISFIED, "rtems_task_create"); + + sc = rtems_task_create( + name, + RTEMS_MINIMUM_PRIORITY, + RTEMS_MINIMUM_STACK_SIZE, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &id + ); + directive_failed(sc, "rtems_task_create"); + + print_info(); + + puts("*** END OF POSIX TEST STKALLOC 02 ***"); + + rtems_test_exit(0); +} + +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_TASKS TASK_COUNT + +#define CONFIGURE_TASK_STACK_ALLOCATOR_INIT task_stack_init +#define CONFIGURE_TASK_STACK_ALLOCATOR task_stack_allocate +#define CONFIGURE_TASK_STACK_DEALLOCATOR task_stack_free +#define CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE +#define CONFIGURE_TASK_STACK_FROM_ALLOCATOR(stack_size) \ + ((stack_size) + HEAP_BLOCK_HEADER_SIZE + PAGE_SIZE - 1) + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include + +static char task_stack_space + [CONFIGURE_TASK_STACK_FROM_ALLOCATOR(CONFIGURE_STACK_SPACE_SIZE)]; + +static void task_stack_init(size_t stack_space_size) +{ + bool ok = _Heap_Initialize( + &task_stack_heap, + task_stack_space, + sizeof(task_stack_space), + PAGE_SIZE + ); + + rtems_test_assert(stack_space_size == CONFIGURE_STACK_SPACE_SIZE); + rtems_test_assert(ok); +} + +static void *task_stack_allocate(size_t stack_size) +{ + return _Heap_Allocate(&task_stack_heap, stack_size); +} + +static void task_stack_free(void *addr) +{ + _Heap_Free(&task_stack_heap, addr); +} diff --git a/testsuites/sptests/spstkalloc02/spstkalloc02.doc b/testsuites/sptests/spstkalloc02/spstkalloc02.doc new file mode 100644 index 0000000000..0efff6851d --- /dev/null +++ b/testsuites/sptests/spstkalloc02/spstkalloc02.doc @@ -0,0 +1,19 @@ +# +# $Id$ +# +# Copyright (c) 2011 embedded brains GmbH. +# +# The license and distribution terms for this file may be +# found in the file LICENSE in this distribution or at +# http://www.rtems.com/license/LICENSE. +# + +This file describes the directives and concepts tested by this test set. + +test set name: spstkalloc01 + +directives: + +concepts: + ++ Ensure that the task stack allocator works. diff --git a/testsuites/sptests/spstkalloc02/spstkalloc02.scn b/testsuites/sptests/spstkalloc02/spstkalloc02.scn new file mode 100644 index 0000000000..71c0066ce4 --- /dev/null +++ b/testsuites/sptests/spstkalloc02/spstkalloc02.scn @@ -0,0 +1,6 @@ +*** POSIX TEST STKALLOC 02 *** +used blocks = 2, largest used block = 5120, used space = 10240 +free blocks = 1, largest free block = 20480, free space = 20480 +used blocks = 6, largest used block = 5120, used space = 30720 +free blocks = 0, largest free block = 0, free space = 0 +*** END OF POSIX TEST STKALLOC 02 *** -- cgit v1.2.3