[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( ®s->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