Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753969AbbB0Dah (ORCPT ); Thu, 26 Feb 2015 22:30:37 -0500 Received: from szxga02-in.huawei.com ([119.145.14.65]:38591 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753244AbbB0Daf (ORCPT ); Thu, 26 Feb 2015 22:30:35 -0500 From: Wang Nan To: , CC: , , , , , , , , Subject: [PATCH] x86, traps: early_trap_init() cleanup. Date: Fri, 27 Feb 2015 11:28:50 +0800 Message-ID: <1425007730-55260-1-git-send-email-wangnan0@huawei.com> X-Mailer: git-send-email 1.8.4 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.107.197.247] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2674 Lines: 72 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 --- 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-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/