* sp40/init.c, sp40/sp40.doc, sp40/sp40.scn: New test cases.

	* spintrcritical09/init.c, spintrcritical10/init.c,
	spintrcritical11/init.c: Fixed potentially infinite loops.
This commit is contained in:
Joel Sherrill
2009-10-09 13:43:36 +00:00
parent 4ee2c53f01
commit bbf6253a77
4 changed files with 120 additions and 19 deletions

View File

@@ -1,7 +1,11 @@
2009-10-09 Sebastian Huber <Sebastian.Huber@embedded-brains.de>
* sp40/init.c, sp40/sp40.doc, sp40/sp40.scn: New test cases.
2009-10-04 Sebastian Huber <Sebastian.Huber@embedded-brains.de>
* sptests/spintrcritical09/init.c, sptests/spintrcritical10/init.c,
sptests/spintrcritical11/init.c: Fixed potentially infinite loops.
* spintrcritical09/init.c, spintrcritical10/init.c,
spintrcritical11/init.c: Fixed potentially infinite loops.
* sp20/system.h: Increased micro seconds per tick in order to be more
independent of the console output speed.

View File

@@ -4,6 +4,8 @@
* COPYRIGHT (c) 1989-2007.
* On-Line Applications Research Corporation (OAR).
*
* Copyright (c) 2009 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.
@@ -11,24 +13,42 @@
* $Id$
*/
#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
#include <tmacros.h>
rtems_device_driver test_open(
static rtems_device_driver test_open(
rtems_device_major_number minor,
rtems_device_minor_number major,
void *ignored
)
{
return RTEMS_IO_ERROR;
}
rtems_driver_address_table test_driver = {
NULL, /* initialization procedure */
test_open, /* open request procedure */
NULL, /* close request procedure */
NULL, /* read request procedure */
NULL, /* write request procedure */
NULL, /* special functions procedure */
static rtems_driver_address_table test_driver = {
.initialization_entry = NULL,
.open_entry = test_open,
.close_entry = NULL,
.read_entry = NULL,
.write_entry = NULL,
.control_entry = NULL
};
#define test_interrupt_context_enter( level ) \
do { \
_Thread_Disable_dispatch(); \
rtems_interrupt_disable( level ); \
++_ISR_Nest_level; \
} while (0)
#define test_interrupt_context_leave( level ) \
do { \
--_ISR_Nest_level; \
rtems_interrupt_enable( level ); \
_Thread_Enable_dispatch(); \
} while (0)
rtems_task Init(
rtems_task_argument argument
)
@@ -36,6 +56,8 @@ rtems_task Init(
rtems_status_code sc;
rtems_device_major_number registered;
rtems_device_major_number registered_not;
rtems_device_major_number invalid_major = _IO_Number_of_drivers + 1;
rtems_interrupt_level level;
puts( "\n\n*** TEST 40 ***" );
@@ -58,24 +80,87 @@ rtems_task Init(
);
puts( "Init - rtems_io_register_driver - used slot" );
sc = rtems_io_register_driver( registered, &test_driver, &registered );
sc = rtems_io_register_driver( registered, &test_driver, &registered_not );
fatal_directive_status(
sc,
RTEMS_RESOURCE_IN_USE,
"rtems_io_register_driver slot in use"
);
puts( "Init - rtems_io_unregister_driver - used slot" );
sc = rtems_io_unregister_driver( registered );
directive_failed( sc, "rtems_io_unregister_driver" );
puts( "Init - rtems_io_register_driver - free slot" );
sc = rtems_io_register_driver( registered, &test_driver, &registered );
directive_failed( sc, "rtems_io_register_driver" );
puts( "Init - rtems_io_register_driver - called from interrupt context" );
test_interrupt_context_enter( level );
sc = rtems_io_register_driver( 0, NULL, NULL );
test_interrupt_context_leave( level );
fatal_directive_status(
sc,
RTEMS_CALLED_FROM_ISR,
"rtems_io_register_driver"
);
puts( "Init - rtems_io_register_driver - invalid registered major pointer" );
sc = rtems_io_register_driver( 0, NULL, NULL );
fatal_directive_status(
sc,
RTEMS_INVALID_ADDRESS,
"rtems_io_register_driver"
);
puts( "Init - rtems_io_register_driver - invalid driver table pointer" );
sc = rtems_io_register_driver( 0, NULL, &registered );
fatal_directive_status(
sc,
RTEMS_INVALID_ADDRESS,
"rtems_io_register_driver"
);
puts( "Init - rtems_io_register_driver - invalid empty driver table" );
test_driver.open_entry = NULL;
sc = rtems_io_register_driver( 0, &test_driver, &registered );
test_driver.open_entry = test_open;
fatal_directive_status(
sc,
RTEMS_INVALID_ADDRESS,
"rtems_io_register_driver"
);
puts( "Init - rtems_io_register_driver - invalid major" );
sc = rtems_io_register_driver( invalid_major, &test_driver, &registered );
fatal_directive_status(
sc,
RTEMS_INVALID_NUMBER,
"rtems_io_register_driver"
);
puts( "Init - rtems_io_unregister_driver - called from interrupt context" );
test_interrupt_context_enter( level );
sc = rtems_io_unregister_driver( 0 );
test_interrupt_context_leave( level );
fatal_directive_status(
sc,
RTEMS_CALLED_FROM_ISR,
"rtems_io_unregister_driver"
);
puts( "Init - rtems_io_unregister_driver - invalid major number" );
sc = rtems_io_unregister_driver( invalid_major );
fatal_directive_status(
sc,
RTEMS_UNSATISFIED,
"rtems_io_unregister_driver"
);
puts( "*** END OF TEST 40 ***" );
rtems_test_exit( 0 );
}
/* functions */
rtems_task Init(
rtems_task_argument argument
);
/* configuration information */
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER

View File

@@ -16,6 +16,7 @@ test set name: sp40
directives:
rtems_io_register_driver
rtems_io_unregister_driver
concepts:
@@ -23,3 +24,5 @@ concepts:
when inserting into a slot that is already in use.
+ Focus on case where initialization entry is NULL and open entry is NOT NULL.
+ Provoke error conditions.

View File

@@ -2,6 +2,15 @@
Init - rtems_io_register_driver - init == NULL, open != NULL OK
Init - Major slot returned = 2
Init - rtems_io_register_driver - init == NULL, open != NULL OK
Init - Major slot returned = 0
Init - Major slot returned = 3
Init - rtems_io_register_driver - used slot
Init - rtems_io_unregister_driver - used slot
Init - rtems_io_register_driver - free slot
Init - rtems_io_register_driver - called from interrupt context
Init - rtems_io_register_driver - invalid registered major pointer
Init - rtems_io_register_driver - invalid driver table pointer
Init - rtems_io_register_driver - invalid empty driver table
Init - rtems_io_register_driver - invalid major
Init - rtems_io_unregister_driver - called from interrupt context
Init - rtems_io_unregister_driver - invalid major number
*** END OF TEST 40 ***