diff options
author | Max Filippov <jcmvbkbc@gmail.com> | 2023-06-13 19:56:13 -0700 |
---|---|---|
committer | Max Filippov <jcmvbkbc@gmail.com> | 2023-06-13 21:56:27 -0700 |
commit | 67e886229e27e80253e1ff9025a74a3dce941f17 (patch) | |
tree | d33f69927c1591698728407788dc103474da80c8 /arch/xtensa | |
parent | 959b76a909bf520b3b2ead067db487a80d19663d (diff) | |
download | lwn-67e886229e27e80253e1ff9025a74a3dce941f17.tar.gz lwn-67e886229e27e80253e1ff9025a74a3dce941f17.zip |
xtensa: move early_trap_init from kasan_early_init to init_arch
There may be other users for the early traps besides KASAN. Move call to
the early_trap_init from kasan_early_init. Protect init_exc_table
initializer with ifdef to make sure it builds on noMMU configurations.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Diffstat (limited to 'arch/xtensa')
-rw-r--r-- | arch/xtensa/include/asm/traps.h | 2 | ||||
-rw-r--r-- | arch/xtensa/kernel/setup.c | 6 | ||||
-rw-r--r-- | arch/xtensa/mm/kasan_init.c | 2 |
3 files changed, 8 insertions, 2 deletions
diff --git a/arch/xtensa/include/asm/traps.h b/arch/xtensa/include/asm/traps.h index 6f74ccc0c7ea..acffb02f8760 100644 --- a/arch/xtensa/include/asm/traps.h +++ b/arch/xtensa/include/asm/traps.h @@ -64,8 +64,10 @@ void do_unhandled(struct pt_regs *regs); static inline void __init early_trap_init(void) { static struct exc_table init_exc_table __initdata = { +#ifdef CONFIG_MMU .fast_kernel_handler[EXCCAUSE_DTLB_MISS] = fast_second_level_miss, +#endif }; xtensa_set_sr(&init_exc_table, excsave1); } diff --git a/arch/xtensa/kernel/setup.c b/arch/xtensa/kernel/setup.c index 34212a240b99..09ab4d83faf8 100644 --- a/arch/xtensa/kernel/setup.c +++ b/arch/xtensa/kernel/setup.c @@ -47,6 +47,7 @@ #include <asm/smp.h> #include <asm/sysmem.h> #include <asm/timex.h> +#include <asm/traps.h> #if defined(CONFIG_VGA_CONSOLE) || defined(CONFIG_DUMMY_CONSOLE) struct screen_info screen_info = { @@ -242,6 +243,11 @@ void __init early_init_devtree(void *params) void __init init_arch(bp_tag_t *bp_start) { + /* Initialize basic exception handling if configuration may need it */ + + if (IS_ENABLED(CONFIG_KASAN)) + early_trap_init(); + /* Initialize MMU. */ init_mmu(); diff --git a/arch/xtensa/mm/kasan_init.c b/arch/xtensa/mm/kasan_init.c index 1fef24db2ff6..f00d122aa806 100644 --- a/arch/xtensa/mm/kasan_init.c +++ b/arch/xtensa/mm/kasan_init.c @@ -14,7 +14,6 @@ #include <linux/kernel.h> #include <asm/initialize_mmu.h> #include <asm/tlbflush.h> -#include <asm/traps.h> void __init kasan_early_init(void) { @@ -31,7 +30,6 @@ void __init kasan_early_init(void) BUG_ON(!pmd_none(*pmd)); set_pmd(pmd, __pmd((unsigned long)kasan_early_shadow_pte)); } - early_trap_init(); } static void __init populate(void *start, void *end) |