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:
Joel Sherrill
2009-07-28 19:23:49 +00:00
parent c7cf1d77ca
commit 5353469af4
9 changed files with 193 additions and 9 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -115,6 +115,7 @@ spintrcritical12/Makefile
spintrcritical13/Makefile
spintrcritical14/Makefile
spintrcritical15/Makefile
spintrcritical16/Makefile
spobjgetnext/Makefile
spprintk/Makefile
spsize/Makefile

View File

@@ -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

View File

@@ -0,0 +1,2 @@
Makefile
Makefile.in

View 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

View 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 */

View 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.

View 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 ***