@@ -1,5 +1,6 @@
// SPDX-License-Identifier: GPL-2.0
+#include <linux/reboot.h>
#include <kunit/test.h>
/*
@@ -11,6 +12,23 @@ extern struct kunit_suite * const * const __kunit_suites_end[];
#if IS_BUILTIN(CONFIG_KUNIT)
+static char *kunit_shutdown;
+core_param(kunit_shutdown, kunit_shutdown, charp, 0644);
+
+static void kunit_handle_shutdown(void)
+{
+ if (!kunit_shutdown)
+ return;
+
+ if (!strcmp(kunit_shutdown, "poweroff"))
+ kernel_power_off();
+ else if (!strcmp(kunit_shutdown, "halt"))
+ kernel_halt();
+ else if (!strcmp(kunit_shutdown, "reboot"))
+ kernel_restart(NULL);
+
+}
+
static void kunit_print_tap_header(void)
{
struct kunit_suite * const * const *suites, * const *subsuite;
@@ -42,6 +60,8 @@ int kunit_run_all_tests(void)
}
}
+ kunit_handle_shutdown();
+
if (has_test_failed)
return -EFAULT;
@@ -141,7 +141,7 @@ class LinuxSourceTree(object):
return True
def run_kernel(self, args=[], timeout=None, build_dir=''):
- args.extend(['mem=256M'])
+ args.extend(['mem=256M', 'kunit_shutdown=halt'])
process = self._ops.linux_bin(args, timeout, build_dir)
with open(os.path.join(build_dir, 'test.log'), 'w') as f:
for line in process.stdout:
@@ -48,7 +48,7 @@ class TestStatus(Enum):
FAILURE_TO_PARSE_TESTS = auto()
kunit_start_re = re.compile(r'^TAP version [0-9]+$')
-kunit_end_re = re.compile('List of all partitions:')
+kunit_end_re = re.compile(r'reboot: System halted')
def isolate_kunit_output(kernel_output):
started = False