LGTM. If this will be repeated for other architectures in the future, it may be worth defining an expected fatal code.
On Thu, Jul 20, 2023 at 3:57 AM Sebastian Huber <sebastian.hu...@embedded-brains.de> wrote: > > 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 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel