2009-06-10 Joel Sherrill <joel.sherrill@oarcorp.com>

* Makefile.am, configure.ac: Add mq_send to full queue from ISR case.
	* psxmsgq03/.cvsignore, psxmsgq03/Makefile.am, psxmsgq03/init.c,
	psxmsgq03/psxmsgq03.doc, psxmsgq03/psxmsgq03.scn, psxmsgq03/system.h: New files.
This commit is contained in:
Joel Sherrill
2009-06-10 17:09:54 +00:00
parent 293a0a41d2
commit 7cd9cd89f9
9 changed files with 225 additions and 1 deletions
+6
View File
@@ -1,3 +1,9 @@
2009-06-10 Joel Sherrill <joel.sherrill@oarcorp.com>
* Makefile.am, configure.ac: Add mq_send to full queue from ISR case.
* psxmsgq03/.cvsignore, psxmsgq03/Makefile.am, psxmsgq03/init.c,
psxmsgq03/psxmsgq03.doc, psxmsgq03/psxmsgq03.scn, psxmsgq03/system.h: New files.
2009-05-17 Joel Sherrill <joel.sherrill@oarcorp.com>
* psxrwlock01/psxrwlock01.scn, psxrwlock01/test.c: Add test case for
+1 -1
View File
@@ -6,7 +6,7 @@ ACLOCAL_AMFLAGS = -I ../aclocal
SUBDIRS = psxhdrs psx01 psx02 psx03 psx04 psx05 psx06 psx07 psx08 psx09 \
psx10 psx11 psx12 psx13 psx14 psxcleanup psxtime psxtimer01 psxtimer02 \
psxcancel psxbarrier01 psxmsgq01 psxmsgq02 psxrwlock01 psxsem01 \
psxcancel psxbarrier01 psxmsgq01 psxmsgq03 psxrwlock01 psxsem01 \
psxspin01 psxenosys psxsignal01 psxsysconf psxualarm psxkey01 \
psxfatal01 psxfatal02 psxitimer
+1
View File
@@ -55,6 +55,7 @@ psxkey01/Makefile
psxmount/Makefile
psxmsgq01/Makefile
psxmsgq02/Makefile
psxmsgq03/Makefile
psxreaddir/Makefile
psxrdwrv/Makefile
psxrwlock01/Makefile
+2
View File
@@ -0,0 +1,2 @@
Makefile
Makefile.in
+30
View File
@@ -0,0 +1,30 @@
##
## $Id$
##
MANAGERS = all
rtems_tests_PROGRAMS = psxmsgq03
psxmsgq03_SOURCES = init.c system.h ../include/pmacros.h \
../../support/src/test_support.c
dist_rtems_tests_DATA = psxmsgq03.scn
dist_rtems_tests_DATA += psxmsgq03.doc
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
include $(top_srcdir)/../automake/compile.am
include $(top_srcdir)/../automake/leaf.am
psxmsgq03_LDADD = $(MANAGERS_NOT_WANTED:%=$(PROJECT_LIB)/no-%.rel)
AM_CPPFLAGS += -I$(top_srcdir)/include
AM_CPPFLAGS += -I$(top_srcdir)/../support/include
LINK_OBJS = $(psxmsgq03_OBJECTS) $(psxmsgq03_LDADD)
LINK_LIBS = $(psxmsgq03_LDLIBS)
psxmsgq03$(EXEEXT): $(psxmsgq03_OBJECTS) $(psxmsgq03_DEPENDENCIES)
@rm -f psxmsgq03$(EXEEXT)
$(make-exe)
include $(top_srcdir)/../automake/local.am
+109
View File
@@ -0,0 +1,109 @@
/*
* 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 CONFIGURE_INIT
#include "system.h"
#include <fcntl.h> /* For O_* constants */
#include <sys/stat.h> /* For mode constants */
#include <mqueue.h>
#include "test_support.h"
mqd_t Queue;
volatile bool tsr_fired;
volatile int tsr_status;
volatile int tsr_errno;
rtems_timer_service_routine mq_send_timer(
rtems_id timer,
void *arg
)
{
int msg = 4;
tsr_fired = true;
tsr_status = mq_send( Queue, (const char *)&msg, sizeof(int), 1 );
tsr_errno = errno;
}
void *POSIX_Init(
void *argument
)
{
struct mq_attr attr;
int status;
int msgBody;
rtems_id timer;
rtems_status_code rc;
puts( "\n\n*** POSIX MESSAGE QUEUE TEST 3 ***" );
attr.mq_maxmsg = 1;
attr.mq_msgsize = sizeof(int);
puts( "Init - Open message queue" );
Queue = mq_open( "Qsend", O_CREAT | O_RDWR, 0x777, &attr );
if ( Queue == (-1) ) {
perror( "mq_open failed" );
}
assert( Queue != (-1) );
puts( "Init - send to message queue" );
status = mq_send( Queue, (const char *)&status, sizeof(int), 1 );
if ( status == (-1) ) {
perror( "mq_status failed" );
}
assert( status != (-1) );
/*
* Now create the timer we will send to a full queue from.
*/
puts( "Init - Create Classic API Timer" );
rc = rtems_timer_create( 1, &timer );
directive_failed( rc, "rtems_timer_create" );
puts( "Init - Fire After Classic API Timer" );
tsr_fired = false;
rc = rtems_timer_fire_after(
timer,
rtems_clock_get_ticks_per_second(),
mq_send_timer,
NULL
);
directive_failed( rc, "rtems_timer_fire_after" );
sleep(2);
if ( tsr_fired == false ) {
puts( "ERROR -- TSR DID NOT FIRE" );
rtems_test_exit( 0 );
}
if ( (tsr_status != -1) || (tsr_errno != ENOMEM) ) {
puts( "ERROR -- TSR DID NOT RETURN CORRECT STATUS" );
printf(
"status=%d errno=%d --> %s\n",
tsr_status,
tsr_errno,
strerror(tsr_errno)
);
rtems_test_exit( 0 );
}
puts( "Init - mq_send from ISR returned correct status" );
puts( "*** END OF POSIX MESSAGE QUEUE TEST 3 ***" );
rtems_test_exit( 0 );
return NULL; /* just so the compiler thinks we returned something */
}
@@ -0,0 +1,26 @@
#
# $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: psxmsgq03
directives:
mq_open
mq_send
concepts:
+ Ensure that an error is returned when performing a blocking mq_send
from an Interrupt Service Routine. This condition is beyond the
POSIX Standard because they do not discuss interrupt processing and
what operations are allowed.
@@ -0,0 +1,7 @@
*** POSIX MESSAGE QUEUE TEST 3 ***
Init - Open message queue
Init - send to message queue
Init - Create Classic API Timer
Init - Fire After Classic API Timer
Init - mq_send from ISR returned correct status
*** END OF POSIX MESSAGE QUEUE TEST 3 ***
+43
View File
@@ -0,0 +1,43 @@
/* system.h
*
* This include file contains information that is included in every
* function in the test set.
*
* COPYRIGHT (c) 1989-1999.
* 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$
*/
/* functions */
#include <pmacros.h>
#include <unistd.h>
#include <errno.h>
#include <sched.h>
#include <tmacros.h>
void *POSIX_Init(
void *argument
);
/* configuration information */
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
#define CONFIGURE_MAXIMUM_POSIX_THREADS 1
#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 1
#define CONFIGURE_MAXIMUM_TIMERS 1
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
#include <rtems/confdefs.h>
/* end of include file */