All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wang Nan <wangnan0@huawei.com>
To: <luto@amacapital.net>, <lizefan@huawei.com>
Cc: <mingo@kernel.org>, <masami.hiramatsu.pt@hitachi.com>,
	<linux-kernel@vger.kernel.org>, <rostedt@goodmis.org>,
	<linux-tip-commits@vger.kernel.org>, <tglx@linutronix.de>,
	<hpa@zytor.com>, <dave.hansen@linux.intel.com>, <oleg@redhat.com>
Subject: Re: [PATCH v2] x86, traps: separate set_intr_gate() and cleanup early_trap_init().
Date: Mon, 2 Mar 2015 17:55:38 +0800	[thread overview]
Message-ID: <54F4339A.5040606@huawei.com> (raw)
In-Reply-To: <1425010789-13714-1-git-send-email-wangnan0@huawei.com>

Hi Andy Lutomirski,

Do you have any comment on this patch?

Thank you.

On 2015/2/27 12:19, Wang Nan wrote:
> As early_trap_init() doesn't use IST, replace set_intr_gate_ist() and
> set_system_intr_gate_ist() with their standard counterparts.
> 
> set_intr_gate() requires a trace_debug symbol which we don't have and
> won't use. This patch seprates set_intr_gate() into 2 parts, and uses
> base version in early_trap_init().
> 
> Signed-off-by: Wang Nan <wangnan0@huawei.com>
> ---
> 
> Hi Andy Lutomirski,
> 
>    This patch should be less tricky than previous one [1]. I also tried
>    to renaming all set_intr_gate(), but it causes too many code changes,
>    so I think you will be satisfied with this one.
> 
> Thank you!
> 
> [1] https://lkml.org/lkml/2015/2/26/770
> 
> ---
>  arch/x86/include/asm/desc.h |  7 ++++++-
>  arch/x86/kernel/traps.c     | 20 ++++++++++++--------
>  2 files changed, 18 insertions(+), 9 deletions(-)
> 
> diff --git a/arch/x86/include/asm/desc.h b/arch/x86/include/asm/desc.h
> index a94b82e..a0bf89f 100644
> --- a/arch/x86/include/asm/desc.h
> +++ b/arch/x86/include/asm/desc.h
> @@ -376,11 +376,16 @@ static inline void _set_gate(int gate, unsigned type, void *addr,
>   * Pentium F0 0F bugfix can have resulted in the mapped
>   * IDT being write-protected.
>   */
> -#define set_intr_gate(n, addr)						\
> +#define set_intr_gate_notrace(n, addr)					\
>  	do {								\
>  		BUG_ON((unsigned)n > 0xFF);				\
>  		_set_gate(n, GATE_INTERRUPT, (void *)addr, 0, 0,	\
>  			  __KERNEL_CS);					\
> +	} while (0)
> +
> +#define set_intr_gate(n, addr)						\
> +	do {								\
> +		set_intr_gate_notrace(n, addr);				\
>  		_trace_set_gate(n, GATE_INTERRUPT, (void *)trace_##addr,\
>  				0, 0, __KERNEL_CS);			\
>  	} while (0)
> diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
> index 4281988..9965bd1 100644
> --- a/arch/x86/kernel/traps.c
> +++ b/arch/x86/kernel/traps.c
> @@ -926,16 +926,20 @@ dotraplinkage void do_iret_error(struct pt_regs *regs, long error_code)
>  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
> +	 * 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().
> +	 *
> +	 * We don't need to set trace_idt_table like set_intr_gate(),
> +	 * since we don't have trace_debug and it will be reset to
> +	 * 'debug' in trap_init() by set_intr_gate_ist().
>  	 */
> -	set_intr_gate_ist(X86_TRAP_DB, &debug, 0);
> +	set_intr_gate_notrace(X86_TRAP_DB, 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 +1019,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);
> 



  reply	other threads:[~2015-03-02  9:57 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-26  5:49 [PATCH v2] x86, traps: Enable DEBUG_STACK after cpu_init() for TRAP_DB/BP Wang Nan
2015-02-26 13:12 ` [tip:x86/asm] x86/traps: " tip-bot for Wang Nan
2015-02-26 15:12   ` Andy Lutomirski
2015-02-27  2:21     ` Wang Nan
2015-02-27  2:33       ` Andy Lutomirski
2015-02-27  3:28         ` [PATCH] x86, traps: early_trap_init() cleanup Wang Nan
2015-02-27 10:11           ` Borislav Petkov
2015-02-27  4:19         ` [PATCH v2] x86, traps: separate set_intr_gate() and cleanup early_trap_init() Wang Nan
2015-03-02  9:55           ` Wang Nan [this message]
2015-03-02 17:06           ` Andy Lutomirski
2015-03-04 23:51           ` [tip:x86/asm] x86/traps: Separate set_intr_gate() and clean up early_trap_init() tip-bot for Wang Nan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54F4339A.5040606@huawei.com \
    --to=wangnan0@huawei.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=lizefan@huawei.com \
    --cc=luto@amacapital.net \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.com \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.