As early_trap_init() doesn't use IST, replace set_intr_gate_ist(..., 0) and set_system_intr_gate_ist(..., 0) with their standard counterparts. set_intr_gate() requires a trace_debug symbol which we don't have and won't use. Use a small macro trick as a workaround. Signed-off-by: Wang Nan <wangnan0@xxxxxxxxxx> --- Hi Andy Lutomirski, This patch is a bit tricky, but I think we don't need to define another helper for such a small problem. What's your opinion? Thank you! --- arch/x86/kernel/traps.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index 4281988..c24434a 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c @@ -925,17 +925,22 @@ dotraplinkage void do_iret_error(struct pt_regs *regs, long error_code) /* Set of traps needed for early debugging. */ void __init early_trap_init(void) { + /* - * Don't set ist to DEBUG_STACK as it doesn't work until TSS is - * ready in cpu_init() <-- trap_init(). Before trap_init(), CPU - * runs at ring 0 so it is impossible to hit an invalid stack. - * Using the original stack works well enough at this early - * stage. DEBUG_STACK will be equipped after cpu_init() in - * trap_init(). + * Don't use IST to set DEBUG_STACK as it doesn't work until TSS is + * ready in cpu_init() <-- trap_init(). Before trap_init(), CPU runs at + * ring 0 so it is impossible to hit an invalid stack. Using the + * original stack works well enough at this early stage. DEBUG_STACK + * will be equipped after cpu_init() in trap_init(). + * + * Since set_intr_gate() needs a trace_debug but we don't have it, + * use the following #define as a workaround. */ - set_intr_gate_ist(X86_TRAP_DB, &debug, 0); +#define trace_debug debug + set_intr_gate(X86_TRAP_DB, debug); +#undef trace_debug /* int3 can be called from all */ - set_system_intr_gate_ist(X86_TRAP_BP, &int3, 0); + set_system_intr_gate(X86_TRAP_BP, &int3); #ifdef CONFIG_X86_32 set_intr_gate(X86_TRAP_PF, page_fault); #endif @@ -1015,7 +1020,7 @@ void __init trap_init(void) /* * X86_TRAP_DB and X86_TRAP_BP have been set - * in early_trap_init(). However, DEBUG_STACK works only after + * in early_trap_init(). However, ITS works only after * cpu_init() loads TSS. See comments in early_trap_init(). */ set_intr_gate_ist(X86_TRAP_DB, &debug, DEBUG_STACK); -- 1.8.4 -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |