On 13.10.17 19:33, Heinrich Schuchardt wrote:
> A test is added that verifies that the watchdog timer actually
> causes a reboot upon timeout. The test in only executed on
> request using
> 
>     bootefi selftest 'watchdog reboot'
> 
> Signed-off-by: Heinrich Schuchardt <xypron.g...@gmx.de>
> ---
> v2
>       no change
> ---
>  lib/efi_selftest/efi_selftest_watchdog.c | 65 
> +++++++++++++++++++++++++++-----
>  1 file changed, 55 insertions(+), 10 deletions(-)
> 
> diff --git a/lib/efi_selftest/efi_selftest_watchdog.c 
> b/lib/efi_selftest/efi_selftest_watchdog.c
> index f8c5404000..a2c11ab1b9 100644
> --- a/lib/efi_selftest/efi_selftest_watchdog.c
> +++ b/lib/efi_selftest/efi_selftest_watchdog.c
> @@ -5,11 +5,15 @@
>   *
>   * SPDX-License-Identifier:     GPL-2.0+
>   *
> - * This unit test checks that the watchdog timer will not cause
> - * a system restart during the timeout period after a timer reset.
> + * The 'watchdog timer' unit test checks that the watchdog timer
> + * will not cause a system restart during the timeout period after
> + * a timer reset.
>   *
> - * Testing that the watchdog timer actually will reset the system
> - * after a timeout is not possible within the used framework.
> + * The 'watchdog reboot' unit test checks that the watchdog timer
> + * actually reboots the system after a timeout. The test is only
> + * executed on explicit request. Use the following command:
> + *
> + *     bootefi selftest 'watchdog reboot'
>   */
>  
>  #include <efi_selftest.h>
> @@ -28,6 +32,7 @@ static struct efi_event *event_notify;
>  static struct efi_event *event_wait;
>  static struct efi_boot_services *boottime;
>  static struct notify_context notification_context;
> +static bool watchdog_reset;
>  
>  /*
>   * Notification function, increments the notfication count if parameter
> @@ -88,6 +93,34 @@ static int setup(const efi_handle_t handle,
>       return EFI_ST_SUCCESS;
>  }
>  
> +/*
> + * Execute the test resetting the watchdog in a timely manner. No reboot 
> occurs.
> + *
> + * @handle:  handle of the loaded image
> + * @systable:        system table
> + * @return:  EFI_ST_SUCCESS for success
> + */
> +static int setup_timer(const efi_handle_t handle,
> +                    const struct efi_system_table *systable)
> +{
> +     watchdog_reset = true;
> +     return setup(handle, systable);
> +}
> +
> +/*
> + * Execute the test without resetting the watchdog. A system reboot occurs.
> + *
> + * @handle:  handle of the loaded image
> + * @systable:        system table
> + * @return:  EFI_ST_SUCCESS for success
> + */
> +static int setup_reboot(const efi_handle_t handle,
> +                     const struct efi_system_table *systable)
> +{
> +     watchdog_reset = false;
> +     return setup(handle, systable);
> +}
> +
>  /*
>   * Tear down unit test.
>   *
> @@ -146,11 +179,14 @@ static int execute(void)
>               efi_st_error("Setting watchdog timer failed\n");
>               return EFI_ST_FAILURE;
>       }
> +     if (watchdog_reset) {
>       /* Set 600 ms timer */

Please indent :)


Alex

> -     ret = boottime->set_timer(event_notify, EFI_TIMER_PERIODIC, 6000000);
> -     if (ret != EFI_SUCCESS) {
> -             efi_st_error("Could not set timer\n");
> -             return EFI_ST_FAILURE;
> +             ret = boottime->set_timer(event_notify, EFI_TIMER_PERIODIC,
> +                                       6000000);
> +             if (ret != EFI_SUCCESS) {
> +                     efi_st_error("Could not set timer\n");
> +                     return EFI_ST_FAILURE;
> +             }
>       }
>       /* Set 1350 ms timer */
>       ret = boottime->set_timer(event_wait, EFI_TIMER_RELATIVE, 13500000);
> @@ -176,10 +212,19 @@ static int execute(void)
>       return EFI_ST_SUCCESS;
>  }
>  
> -EFI_UNIT_TEST(watchdog) = {
> +EFI_UNIT_TEST(watchdog1) = {
>       .name = "watchdog timer",
>       .phase = EFI_EXECUTE_BEFORE_BOOTTIME_EXIT,
> -     .setup = setup,
> +     .setup = setup_timer,
> +     .execute = execute,
> +     .teardown = teardown,
> +};
> +
> +EFI_UNIT_TEST(watchdog2) = {
> +     .name = "watchdog reboot",
> +     .phase = EFI_EXECUTE_BEFORE_BOOTTIME_EXIT,
> +     .setup = setup_reboot,
>       .execute = execute,
>       .teardown = teardown,
> +     .on_request = true,
>  };
> 
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to