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