[PATCH] validation: Improve sparc/leon3 shutdown test
Gedare Bloom
gedare at rtems.org
Thu Jul 20 17:20:41 UTC 2023
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.huber at 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 at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
More information about the devel
mailing list