[rtems commit] sptests/sp37: Improved interrupt lock tests

Sebastian Huber sebh at rtems.org
Wed Jul 31 13:03:52 UTC 2013


Module:    rtems
Branch:    master
Commit:    f20275db90d3e2b37508894c0a312c0a5c6a7bba
Changeset: http://git.rtems.org/rtems/commit/?id=f20275db90d3e2b37508894c0a312c0a5c6a7bba

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Wed Jul 31 11:56:55 2013 +0200

sptests/sp37: Improved interrupt lock tests

---

 testsuites/sptests/sp37/init.c |   24 +++++++++++++++++++++---
 1 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/testsuites/sptests/sp37/init.c b/testsuites/sptests/sp37/init.c
index 862493c..0ae0b21 100644
--- a/testsuites/sptests/sp37/init.c
+++ b/testsuites/sptests/sp37/init.c
@@ -44,17 +44,35 @@ rtems_timer_service_routine test_isr_in_progress(
 
 /* test bodies */
 
+static rtems_mode get_interrupt_level( void )
+{
+  rtems_status_code sc;
+  rtems_mode mode;
+
+  sc = rtems_task_mode( RTEMS_CURRENT_MODE, RTEMS_CURRENT_MODE, &mode );
+  rtems_test_assert( sc == RTEMS_SUCCESSFUL );
+
+  return mode & RTEMS_INTERRUPT_MASK;
+}
+
 static void test_interrupt_locks( void )
 {
-  rtems_interrupt_lock lock = RTEMS_INTERRUPT_LOCK_INITIALIZER;
+  rtems_mode normal_interrupt_level = get_interrupt_level();
+  rtems_interrupt_lock initialized = RTEMS_INTERRUPT_LOCK_INITIALIZER;
+  rtems_interrupt_lock lock;
   rtems_interrupt_level level;
 
   rtems_interrupt_lock_initialize( &lock );
+  rtems_test_assert( memcmp( &lock, &initialized, sizeof( lock ) ) == 0 );
 
   rtems_interrupt_lock_acquire( &lock, level );
+  rtems_test_assert( normal_interrupt_level != get_interrupt_level() );
   rtems_interrupt_lock_release( &lock, level );
 
+  rtems_test_assert( normal_interrupt_level == get_interrupt_level() );
+
   rtems_interrupt_lock_acquire_isr( &lock );
+  rtems_test_assert( normal_interrupt_level == get_interrupt_level() );
   rtems_interrupt_lock_release_isr( &lock );
 }
 
@@ -210,6 +228,8 @@ rtems_task Init(
 
   puts( "\n\n*** TEST 37 ***" );
 
+  test_interrupt_locks();
+
   build_time( &time, 12, 31, 1988, 9, 0, 0, 0 );
   status = rtems_clock_set( &time );
   directive_failed( status, "rtems_clock_set" );
@@ -337,8 +357,6 @@ rtems_task Init(
 
   check_isr_worked( "body", isr_in_progress_body );
 
-  test_interrupt_locks();
-
   puts( "*** END OF TEST 37 ***" );
   rtems_test_exit( 0 );
 }




More information about the vc mailing list