efi_selftest: avoid unnecessary reset

When we do not execute a test requiring ExitBootServices do not reset the
system after testing.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
Heinrich Schuchardt 2020-09-30 21:52:09 +02:00
parent dc374ab08f
commit eb0d1d8399

View File

@ -142,6 +142,27 @@ static int teardown(struct efi_unit_test *test, unsigned int *failures)
return ret;
}
/*
* Check that a test requiring reset exists.
*
* @testname: name of the test
* @return: test, or NULL if not found
*/
static bool need_reset(const u16 *testname)
{
struct efi_unit_test *test;
for (test = ll_entry_start(struct efi_unit_test, efi_unit_test);
test < ll_entry_end(struct efi_unit_test, efi_unit_test); ++test) {
if (testname && efi_st_strcmp_16_8(testname, test->name))
continue;
if (test->phase == EFI_SETUP_BEFORE_BOOTTIME_EXIT ||
test->phase == EFI_SETUP_AFTER_BOOTTIME_EXIT)
return true;
}
return false;
}
/*
* Check that a test exists.
*
@ -290,6 +311,16 @@ efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle,
EFI_ST_SETUP | EFI_ST_EXECUTE | EFI_ST_TEARDOWN,
&failures);
if (!need_reset(testname)) {
if (failures)
ret = EFI_PROTOCOL_ERROR;
/* Give feedback */
efi_st_printc(EFI_WHITE, "\nSummary: %u failures\n\n",
failures);
return ret;
}
/* Execute mixed tests */
efi_st_do_tests(testname, EFI_SETUP_BEFORE_BOOTTIME_EXIT,
EFI_ST_SETUP, &failures);