/* SPDX-License-Identifier: GPL-2.0 */ #include #include static bool crash_handling_enabled = 1; static bool avm_rte_initialized; static char *crash_in_init_level = ""; module_param(crash_handling_enabled, bool, 0644); MODULE_PARM_DESC(crash_handling_enabled, "Enable the usage of the RTE crash handling instead of mainline handling"); module_param(crash_in_init_level, charp, 0444); MODULE_PARM_DESC(crash_in_init_level, "Triggers a kernel panic in the desired init level (early, core, postcore, arch, subsys, fs, device, late)."); void avm_rte_mark_as_ready(void) { avm_rte_initialized = 1; } bool avm_is_rte_crash_handling_enabled(void) { return avm_rte_initialized && crash_handling_enabled; } #define CRASH_TEST(init_level) \ static int __init avm_rte_crash_handling_##init_level##_init(void) \ { \ if (avm_fw_is_internal() && \ !strncmp(crash_in_init_level, #init_level, sizeof(#init_level))) \ panic("panic in " #init_level " init."); \ return 0; \ } \ init_level##_initcall(avm_rte_crash_handling_##init_level##_init) CRASH_TEST(early); CRASH_TEST(core); CRASH_TEST(postcore); CRASH_TEST(arch); CRASH_TEST(subsys); CRASH_TEST(fs); CRASH_TEST(device); /* Ungefähr an dieser Stelle wäre auch ein module_init() */ CRASH_TEST(late);