[tests] Verify ability to sleep the CPU

The self-test suite does not currently ever attempt to sleep the CPU.
This is an operation that may fail (e.g. by attempting to execute a
privileged instruction while running as a Linux userspace binary, or
by halting the CPU with all interrupts disabled).

Add a trivial self-test to exercise the ability to sleep the CPU
without crashing or halting forever.

Inspired-by: Xiaotian Wu <wuxiaotian@loongson.cn>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
pull/874/head
Michael Brown 2023-01-31 10:17:57 +00:00
parent 3bcd0d3271
commit 66a2ff442d
2 changed files with 54 additions and 0 deletions

View File

@ -0,0 +1,53 @@
/*
* Copyright (C) 2023 Michael Brown <mbrown@fensystems.co.uk>.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*
* You can also choose to distribute this program under the terms of
* the Unmodified Binary Distribution Licence (as given in the file
* COPYING.UBDL), provided that you have satisfied its requirements.
*/
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
/** @file
*
* CPU sleeping test
*
*/
/* Forcibly enable assertions */
#undef NDEBUG
#include <ipxe/nap.h>
#include <ipxe/test.h>
/**
* Perform CPU sleeping self-test
*
*/
static void nap_test_exec ( void ) {
/* Check that we can sleep without crashing or halting forever */
cpu_nap();
ok ( 1 );
}
/** CPU sleeping self-test */
struct self_test nap_test __self_test = {
.name = "nap",
.exec = nap_test_exec,
};

View File

@ -80,3 +80,4 @@ REQUIRE_OBJECT ( acpi_test );
REQUIRE_OBJECT ( hmac_test ); REQUIRE_OBJECT ( hmac_test );
REQUIRE_OBJECT ( dhe_test ); REQUIRE_OBJECT ( dhe_test );
REQUIRE_OBJECT ( gcm_test ); REQUIRE_OBJECT ( gcm_test );
REQUIRE_OBJECT ( nap_test );