[PATCH] validation: Improve sparc/leon3 shutdown test

Sebastian Huber sebastian.huber at embedded-brains.de
Thu Jul 20 09:57:47 UTC 2023


Test the shutdown halt separately from the SMP-specific shutdown
request.

Update #3716.
---
 .../bsps/fatal-sparc-leon3-shutdown.yml       |  11 +-
 .../validation/bsps/objsparcleon3shutdown.yml |  17 +++
 .../bsps/tc-fatal-sparc-leon3-shutdown-halt.c | 142 ++++++++++++++++++
 ...> tc-fatal-sparc-leon3-shutdown-request.c} |  54 ++-----
 .../bsps/ts-fatal-sparc-leon3-shutdown.c      |   7 +
 5 files changed, 182 insertions(+), 49 deletions(-)
 create mode 100644 spec/build/testsuites/validation/bsps/objsparcleon3shutdown.yml
 create mode 100644 testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-halt.c
 rename testsuites/validation/bsps/{tc-fatal-sparc-leon3-shutdown.c => tc-fatal-sparc-leon3-shutdown-request.c} (75%)

diff --git a/spec/build/testsuites/validation/bsps/fatal-sparc-leon3-shutdown.yml b/spec/build/testsuites/validation/bsps/fatal-sparc-leon3-shutdown.yml
index e1a0f32900..a23409a4b5 100644
--- a/spec/build/testsuites/validation/bsps/fatal-sparc-leon3-shutdown.yml
+++ b/spec/build/testsuites/validation/bsps/fatal-sparc-leon3-shutdown.yml
@@ -5,17 +5,16 @@ copyrights:
 - Copyright (C) 2022 embedded brains GmbH & Co. KG
 cppflags: []
 cxxflags: []
-enabled-by:
-  and:
-  - RTEMS_SMP
-  - bsps/sparc/leon3
+enabled-by: bsps/sparc/leon3
 features: c cprogram
 includes: []
 ldflags:
 - -Wl,--wrap=_CPU_Fatal_halt
-links: []
+links:
+- role: build-dependency
+  uid: objsparcleon3shutdown
 source:
-- testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown.c
+- testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-halt.c
 - testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown.c
 stlib: []
 target: testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown.exe
diff --git a/spec/build/testsuites/validation/bsps/objsparcleon3shutdown.yml b/spec/build/testsuites/validation/bsps/objsparcleon3shutdown.yml
new file mode 100644
index 0000000000..d6da0eafdc
--- /dev/null
+++ b/spec/build/testsuites/validation/bsps/objsparcleon3shutdown.yml
@@ -0,0 +1,17 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+build-type: objects
+cflags: []
+copyrights:
+- Copyright (C) 2023 embedded brains GmbH & Co. KG
+cppflags: []
+cxxflags: []
+enabled-by:
+  and:
+  - RTEMS_SMP
+  - bsps/sparc/leon3
+includes: []
+install: []
+links: []
+source:
+- testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-request.c
+type: build
diff --git a/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-halt.c b/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-halt.c
new file mode 100644
index 0000000000..0b0b5cf5b7
--- /dev/null
+++ b/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-halt.c
@@ -0,0 +1,142 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup BspSparcLeon3ValFatalShutdownHalt
+ */
+
+/*
+ * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated.  If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
+ *
+ * https://www.rtems.org/bugs.html
+ *
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual.  The manual is provided as a part of
+ * a release.  For development sources please refer to the online
+ * documentation at:
+ *
+ * https://docs.rtems.org
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/sysinit.h>
+
+#include "tx-support.h"
+
+#include <rtems/test.h>
+
+/**
+ * @defgroup BspSparcLeon3ValFatalShutdownHalt \
+ *   spec:/bsp/sparc/leon3/val/fatal-shutdown-halt
+ *
+ * @ingroup TestsuitesBspsFatalSparcLeon3Shutdown
+ *
+ * @brief Tests the leon3 BSP family shutdown procedure.
+ *
+ * This test case performs the following actions:
+ *
+ * - Check the effects of the leon3 BSP family shutdown procedure.
+ *
+ *   - Check that no dynamic fatal error extension was invoked.  This shows
+ *     that the leon3 BSP family shutdown procedure called the wrapped
+ *     _CPU_Fatal_halt() function of the test suite.
+ *
+ * @{
+ */
+
+static Atomic_Uint dynamic_fatal_extension_counter;
+
+static rtems_status_code status;
+
+static unsigned int Add( Atomic_Uint *a, unsigned int b )
+{
+  return _Atomic_Fetch_add_uint( a, b, ATOMIC_ORDER_RELAXED );
+}
+
+static void DynamicFatalHandler(
+  rtems_fatal_source source,
+  bool               always_set_to_false,
+  rtems_fatal_code   code
+)
+{
+  (void) source;
+  (void) code;
+  (void) always_set_to_false;
+  (void) Add( &dynamic_fatal_extension_counter, 1 );
+}
+
+static void InitBspSparcLeon3ValFatalShutdownHalt( void )
+{
+  rtems_extensions_table table = { .fatal = DynamicFatalHandler };
+  rtems_id               id;
+
+  status = rtems_extension_create( OBJECT_NAME, &table, &id );
+}
+
+RTEMS_SYSINIT_ITEM(
+  InitBspSparcLeon3ValFatalShutdownHalt,
+  RTEMS_SYSINIT_DEVICE_DRIVERS,
+  RTEMS_SYSINIT_ORDER_MIDDLE
+);
+
+/**
+ * @brief Check the effects of the leon3 BSP family shutdown procedure.
+ */
+static void BspSparcLeon3ValFatalShutdownHalt_Action_0( void )
+{
+  uint32_t counter;
+
+  /*
+   * Check that no dynamic fatal error extension was invoked.  This shows that
+   * the leon3 BSP family shutdown procedure called the wrapped
+   * _CPU_Fatal_halt() function of the test suite.
+   */
+  T_step_rsc_success( 0, status );
+  counter = Add( &dynamic_fatal_extension_counter, 0 );
+  T_step_eq_u32( 1, counter, 0 );
+}
+
+/**
+ * @fn void T_case_body_BspSparcLeon3ValFatalShutdownHalt( void )
+ */
+T_TEST_CASE( BspSparcLeon3ValFatalShutdownHalt )
+{
+  T_plan( 2 );
+
+  BspSparcLeon3ValFatalShutdownHalt_Action_0();
+}
+
+/** @} */
diff --git a/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown.c b/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-request.c
similarity index 75%
rename from testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown.c
rename to testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-request.c
index 9b1f1626ec..46bc44e7cb 100644
--- a/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown.c
+++ b/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-request.c
@@ -3,7 +3,7 @@
 /**
  * @file
  *
- * @ingroup BspSparcLeon3ValFatalShutdown
+ * @ingroup BspSparcLeon3ValFatalShutdownRequest
  */
 
 /*
@@ -61,12 +61,12 @@
 #include <rtems/test.h>
 
 /**
- * @defgroup BspSparcLeon3ValFatalShutdown \
- *   spec:/bsp/sparc/leon3/val/fatal-shutdown
+ * @defgroup BspSparcLeon3ValFatalShutdownRequest \
+ *   spec:/bsp/sparc/leon3/val/fatal-shutdown-request
  *
  * @ingroup TestsuitesBspsFatalSparcLeon3Shutdown
  *
- * @brief Tests the leon3 BSP family shutdown procedure.
+ * @brief Tests the leon3 BSP family SMP-specific shutdown procedure.
  *
  * This test case performs the following actions:
  *
@@ -83,10 +83,6 @@
  *   - Check that the RTEMS_FATAL_SOURCE_SMP with SMP_FATAL_SHUTDOWN_RESPONSE
  *     fatal error occurred on the second processor.
  *
- *   - Check that no dynamic fatal error extension was invoked.  This shows
- *     that the leon3 BSP family shutdown procedure called the wrapped
- *     _CPU_Fatal_halt() function of the test suite.
- *
  * @{
  */
 
@@ -96,10 +92,6 @@ static Atomic_Uint shutdown_response_counter;
 
 static uint32_t shutdown_response_cpu_index = UINT32_MAX;
 
-static Atomic_Uint dynamic_fatal_extension_counter;
-
-static rtems_status_code status;
-
 static unsigned int Add( Atomic_Uint *a, unsigned int b )
 {
   return _Atomic_Fetch_add_uint( a, b, ATOMIC_ORDER_RELAXED );
@@ -122,32 +114,17 @@ static void ShutdownFatalHandler(
   }
 }
 
-static void DynamicFatalHandler(
-  rtems_fatal_source source,
-  bool               always_set_to_false,
-  rtems_fatal_code   code
-)
+static void InitBspSparcLeon3ValFatalShutdownRequest( void )
 {
-  (void) source;
-  (void) code;
-  (void) always_set_to_false;
-  (void) Add( &dynamic_fatal_extension_counter, 1 );
-}
-
-static void InitTestCase( void )
-{
-  rtems_extensions_table table = { .fatal = DynamicFatalHandler };
   irqamp                *regs;
-  rtems_id               id;
 
   regs = LEON3_IrqCtrl_Regs;
   mpstat_during_sysinit = grlib_load_32( &regs->mpstat );
   SetFatalHandler( ShutdownFatalHandler, NULL );
-  status = rtems_extension_create( OBJECT_NAME, &table, &id );
 }
 
 RTEMS_SYSINIT_ITEM(
-  InitTestCase,
+  InitBspSparcLeon3ValFatalShutdownRequest,
   RTEMS_SYSINIT_DEVICE_DRIVERS,
   RTEMS_SYSINIT_ORDER_MIDDLE
 );
@@ -155,7 +132,7 @@ RTEMS_SYSINIT_ITEM(
 /**
  * @brief Check the effects of the leon3 BSP family shutdown procedure.
  */
-static void BspSparcLeon3ValFatalShutdown_Action_0( void )
+static void BspSparcLeon3ValFatalShutdownRequest_Action_0( void )
 {
   irqamp  *regs;
   uint32_t counter;
@@ -187,25 +164,16 @@ static void BspSparcLeon3ValFatalShutdown_Action_0( void )
    * fatal error occurred on the second processor.
    */
   T_step_eq_u32( 2, shutdown_response_cpu_index, 1 );
-
-  /*
-   * Check that no dynamic fatal error extension was invoked.  This shows that
-   * the leon3 BSP family shutdown procedure called the wrapped
-   * _CPU_Fatal_halt() function of the test suite.
-   */
-  T_step_rsc_success( 3, status );
-  counter = Add( &dynamic_fatal_extension_counter, 0 );
-  T_step_eq_u32( 4, dynamic_fatal_extension_counter, 0 );
 }
 
 /**
- * @fn void T_case_body_BspSparcLeon3ValFatalShutdown( void )
+ * @fn void T_case_body_BspSparcLeon3ValFatalShutdownRequest( void )
  */
-T_TEST_CASE( BspSparcLeon3ValFatalShutdown )
+T_TEST_CASE( BspSparcLeon3ValFatalShutdownRequest )
 {
-  T_plan( 5 );
+  T_plan( 3 );
 
-  BspSparcLeon3ValFatalShutdown_Action_0();
+  BspSparcLeon3ValFatalShutdownRequest_Action_0();
 }
 
 /** @} */
diff --git a/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown.c b/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown.c
index 7f5ddbb614..bc229e7824 100644
--- a/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown.c
+++ b/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown.c
@@ -120,6 +120,7 @@ void __wrap__CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr code )
 
 #define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
 
+#if defined(RTEMS_SMP)
 #define CONFIGURE_MAXIMUM_PROCESSORS 2
 
 #include <rtems/score/scheduleredfsmp.h>
@@ -136,6 +137,7 @@ RTEMS_SCHEDULER_EDF_SMP( a );
 #define CONFIGURE_SCHEDULER_ASSIGNMENTS \
   RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY ), \
   RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY )
+#endif /* RTEMS_SMP */
 
 #define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 0
 
@@ -151,12 +153,17 @@ RTEMS_SCHEDULER_EDF_SMP( a );
 
 static void *ShutdownIdleBody( uintptr_t arg )
 {
+#if defined(RTEMS_SMP)
   if ( rtems_scheduler_get_processor() == 0 ) {
     rtems_test_begin( rtems_test_name, TEST_STATE );
     rtems_fatal( RTEMS_FATAL_SOURCE_SMP, SMP_FATAL_SHUTDOWN );
   }
 
   return _CPU_Thread_Idle_body( arg );
+#else
+  rtems_test_begin( rtems_test_name, TEST_STATE );
+  rtems_fatal( RTEMS_FATAL_SOURCE_APPLICATION, 123 );
+#endif
 }
 
 #define CONFIGURE_IDLE_TASK_BODY ShutdownIdleBody
-- 
2.35.3



More information about the devel mailing list