[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( &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
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list