forked from Imagelibrary/rtems
2009-07-28 Joel Sherrill <joel.sherrill@OARcorp.com>
* Makefile.am, configure.ac: Add test case for processing a timeout on a thread (that is the thread executing) that has also had its request satisfied while it is being enqueued. * spintrcritical16/.cvsignore, spintrcritical16/Makefile.am, spintrcritical16/init.c, spintrcritical16/spintrcritical16.doc, spintrcritical16/spintrcritical16.scn: New files. * spintrcritical15/init.c: Remove unused TSR>
This commit is contained in:
@@ -1,3 +1,13 @@
|
||||
2009-07-28 Joel Sherrill <joel.sherrill@OARcorp.com>
|
||||
|
||||
* Makefile.am, configure.ac: Add test case for processing a timeout
|
||||
on a thread (that is the thread executing) that has also had its
|
||||
request satisfied while it is being enqueued.
|
||||
* spintrcritical16/.cvsignore, spintrcritical16/Makefile.am,
|
||||
spintrcritical16/init.c, spintrcritical16/spintrcritical16.doc,
|
||||
spintrcritical16/spintrcritical16.scn: New files.
|
||||
* spintrcritical15/init.c: Remove unused TSR>
|
||||
|
||||
2009-07-27 Joel Sherrill <joel.sherrill@OARcorp.com>
|
||||
|
||||
* Makefile.am, configure.ac: Add test case for a thread timing out on a
|
||||
|
||||
@@ -21,7 +21,7 @@ SUBDIRS = \
|
||||
spintrcritical01 spintrcritical02 spintrcritical03 spintrcritical04 \
|
||||
spintrcritical05 spintrcritical06 spintrcritical07 spintrcritical08 \
|
||||
spintrcritical09 spintrcritical10 spintrcritical11 spintrcritical12 \
|
||||
spintrcritical13 spintrcritical14 spintrcritical15
|
||||
spintrcritical13 spintrcritical14 spintrcritical15 spintrcritical16
|
||||
|
||||
DIST_SUBDIRS = $(SUBDIRS) spfatal_support spintrcritical_support
|
||||
EXTRA_DIST = spfatal_support/init.c spfatal_support/system.h
|
||||
|
||||
@@ -115,6 +115,7 @@ spintrcritical12/Makefile
|
||||
spintrcritical13/Makefile
|
||||
spintrcritical14/Makefile
|
||||
spintrcritical15/Makefile
|
||||
spintrcritical16/Makefile
|
||||
spobjgetnext/Makefile
|
||||
spprintk/Makefile
|
||||
spsize/Makefile
|
||||
|
||||
@@ -20,13 +20,6 @@ rtems_id Main_task;
|
||||
rtems_id Secondary_task_id;
|
||||
rtems_id Semaphore;
|
||||
|
||||
rtems_timer_service_routine test_release_from_isr(
|
||||
rtems_id timer,
|
||||
void *arg
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
rtems_task Secondary_task(
|
||||
rtems_task_argument ignored
|
||||
)
|
||||
@@ -103,7 +96,6 @@ rtems_task Init(
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
||||
|
||||
#define CONFIGURE_MAXIMUM_TASKS 2
|
||||
#define CONFIGURE_MAXIMUM_TIMERS 1
|
||||
#define CONFIGURE_MICROSECONDS_PER_TICK 1000
|
||||
#define CONFIGURE_INIT_TASK_PRIORITY INIT_PRIORITY
|
||||
#define CONFIGURE_INIT_TASK_MODE RTEMS_PREEMPT
|
||||
|
||||
2
testsuites/sptests/spintrcritical16/.cvsignore
Normal file
2
testsuites/sptests/spintrcritical16/.cvsignore
Normal file
@@ -0,0 +1,2 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
30
testsuites/sptests/spintrcritical16/Makefile.am
Normal file
30
testsuites/sptests/spintrcritical16/Makefile.am
Normal file
@@ -0,0 +1,30 @@
|
||||
##
|
||||
## $Id$
|
||||
##
|
||||
|
||||
MANAGERS = all
|
||||
|
||||
rtems_tests_PROGRAMS = spintrcritical16
|
||||
spintrcritical16_SOURCES = init.c \
|
||||
../spintrcritical_support/intrcritical.c
|
||||
|
||||
dist_rtems_tests_DATA = spintrcritical16.scn
|
||||
dist_rtems_tests_DATA += spintrcritical16.doc
|
||||
|
||||
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
|
||||
include $(top_srcdir)/../automake/compile.am
|
||||
include $(top_srcdir)/../automake/leaf.am
|
||||
|
||||
spintrcritical16_LDADD = $(MANAGERS_NOT_WANTED:%=$(PROJECT_LIB)/no-%.rel)
|
||||
|
||||
AM_CPPFLAGS += -I$(top_srcdir)/../support/include
|
||||
AM_CPPFLAGS += -I$(top_srcdir)/spintrcritical_support
|
||||
|
||||
LINK_OBJS = $(spintrcritical16_OBJECTS) $(spintrcritical16_LDADD)
|
||||
LINK_LIBS = $(spintrcritical16_LDLIBS)
|
||||
|
||||
spintrcritical16$(EXEEXT): $(spintrcritical16_OBJECTS) $(spintrcritical16_DEPENDENCIES)
|
||||
@rm -f spintrcritical16$(EXEEXT)
|
||||
$(make-exe)
|
||||
|
||||
include $(top_srcdir)/../automake/local.am
|
||||
114
testsuites/sptests/spintrcritical16/init.c
Normal file
114
testsuites/sptests/spintrcritical16/init.c
Normal file
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* 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.com/license/LICENSE.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
|
||||
#include <tmacros.h>
|
||||
#include <intrcritical.h>
|
||||
|
||||
#define TEST_NAME "16"
|
||||
|
||||
Thread_Control *Main_TCB;
|
||||
rtems_id Main_task;
|
||||
rtems_id Semaphore;
|
||||
volatile bool case_hit;
|
||||
|
||||
Thread_blocking_operation_States getState(void)
|
||||
{
|
||||
Objects_Locations location;
|
||||
Semaphore_Control *sem;
|
||||
|
||||
sem = (Semaphore_Control *)_Objects_Get(
|
||||
&_Semaphore_Information, Semaphore, &location );
|
||||
if ( location != OBJECTS_LOCAL ) {
|
||||
puts( "Bad object lookup" );
|
||||
rtems_test_exit(0);
|
||||
}
|
||||
_Thread_Unnest_dispatch();
|
||||
|
||||
return sem->Core_control.semaphore.Wait_queue.sync_state;
|
||||
}
|
||||
|
||||
rtems_timer_service_routine test_release_from_isr(
|
||||
rtems_id timer,
|
||||
void *arg
|
||||
)
|
||||
{
|
||||
if ( getState() == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED ) {
|
||||
case_hit = true;
|
||||
(void) rtems_semaphore_release( Semaphore );
|
||||
_Thread_queue_Process_timeout( Main_TCB );
|
||||
}
|
||||
}
|
||||
|
||||
rtems_task Init(
|
||||
rtems_task_argument ignored
|
||||
)
|
||||
{
|
||||
rtems_status_code sc;
|
||||
int resets;
|
||||
|
||||
puts(
|
||||
"\n\n*** TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***\n"
|
||||
"Init - Trying to generate timeout of a thread that had its blocking\n"
|
||||
"Init - request satisfied while blocking but before time timeout"
|
||||
);
|
||||
|
||||
puts( "Init - rtems_semaphore_create - OK" );
|
||||
sc = rtems_semaphore_create(
|
||||
rtems_build_name( 'S', 'M', '1', ' ' ),
|
||||
0,
|
||||
RTEMS_DEFAULT_ATTRIBUTES,
|
||||
RTEMS_NO_PRIORITY,
|
||||
&Semaphore
|
||||
);
|
||||
directive_failed( sc, "rtems_semaphore_create of SM1" );
|
||||
|
||||
Main_task = rtems_task_self();
|
||||
Main_TCB = _Thread_Executing;
|
||||
|
||||
interrupt_critical_section_test_support_initialize( test_release_from_isr );
|
||||
|
||||
case_hit = false;
|
||||
|
||||
for (resets=0 ; !case_hit && resets<10 ;) {
|
||||
if ( interrupt_critical_section_test_support_delay() )
|
||||
resets++;
|
||||
|
||||
sc = rtems_semaphore_obtain( Semaphore, RTEMS_DEFAULT_OPTIONS, 2 );
|
||||
if ( sc == RTEMS_SUCCESSFUL )
|
||||
break;
|
||||
fatal_directive_status( sc, RTEMS_TIMEOUT, "rtems_semaphore_obtain" );
|
||||
}
|
||||
|
||||
if ( case_hit ) {
|
||||
puts( "Init - Case hit" );
|
||||
puts( "*** END OF TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***" );
|
||||
} else
|
||||
puts( "Init - Case not hit - ran too long" );
|
||||
|
||||
|
||||
rtems_test_exit(0);
|
||||
}
|
||||
|
||||
/* configuration information */
|
||||
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
||||
|
||||
#define CONFIGURE_MAXIMUM_TASKS 1
|
||||
#define CONFIGURE_MAXIMUM_TIMERS 1
|
||||
#define CONFIGURE_MICROSECONDS_PER_TICK 1000
|
||||
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
||||
|
||||
#define CONFIGURE_INIT
|
||||
#include <rtems/confdefs.h>
|
||||
|
||||
/* global variables */
|
||||
28
testsuites/sptests/spintrcritical16/spintrcritical16.doc
Normal file
28
testsuites/sptests/spintrcritical16/spintrcritical16.doc
Normal file
@@ -0,0 +1,28 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# 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.com/license/LICENSE.
|
||||
#
|
||||
|
||||
This file describes the directives and concepts tested by this test set.
|
||||
|
||||
test set name: spintrcritical16
|
||||
|
||||
directives:
|
||||
|
||||
rtems_semaphore_obtain
|
||||
really an odd case in _Thread_queue_Process_timeout
|
||||
|
||||
concepts:
|
||||
|
||||
+ Ensure that a thread timing out on a thread queue while ANOTHER thread is
|
||||
in the process of blocking on the same thread queue is processed correctly.
|
||||
+ Ensuire that is processing a timeout on a thread (that is the thread
|
||||
executing) that has also had its request satisfied while it is being
|
||||
enqueued is probably left as a satisfied case.
|
||||
|
||||
7
testsuites/sptests/spintrcritical16/spintrcritical16.scn
Normal file
7
testsuites/sptests/spintrcritical16/spintrcritical16.scn
Normal file
@@ -0,0 +1,7 @@
|
||||
*** TEST INTERRUPT CRITICAL SECTION 16 ***
|
||||
Init - Trying to generate timeout of a thread that had its blocking
|
||||
Init - request satisfied while blocking but before time timeout
|
||||
Init - rtems_semaphore_create - OK
|
||||
Support - rtems_timer_create - creating timer 1
|
||||
Init - Case hit
|
||||
*** END OF TEST INTERRUPT CRITICAL SECTION 16 ***
|
||||
Reference in New Issue
Block a user