All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lai Jiangshan <jiangshanlai@gmail.com>
To: Borislav Petkov <bp@alien8.de>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	Andy Lutomirski <luto@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>, X86 ML <x86@kernel.org>,
	Lai Jiangshan <jiangshan.ljs@antgroup.com>,
	Ingo Molnar <mingo@redhat.com>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	"H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [PATCH V5 3/7] x86/entry: Move PUSH_AND_CLEAR_REGS out of error_entry()
Date: Tue, 12 Apr 2022 21:52:44 +0800	[thread overview]
Message-ID: <CAJhGHyAsPZAeXUoOa5LJ5bxuMOWzg=cvYNYPVT9kpBM7Tsf3xA@mail.gmail.com> (raw)
In-Reply-To: <YlV+B8faRD2lDoO3@zn.tnic>

On Tue, Apr 12, 2022 at 9:26 PM Borislav Petkov <bp@alien8.de> wrote:
>
> On Tue, Apr 12, 2022 at 08:15:37PM +0800, Lai Jiangshan wrote:
> > From: Lai Jiangshan <jiangshan.ljs@antgroup.com>
> >
> > error_entry() doesn't handle the stack balanced.
>
> What does that mean?

For a normal function, e.g. a function complied from a C function,
the stack will return to its original place when the function
returns.  The size of memory pushed and popped are the same in
a function.

>
> > It includes
> > PUSH_AND_CLEAR_REGS which is commonly needed for all IDT entries and
> > can't pop the regs before it returns.
> >
> > Move PUSH_AND_CLEAR_REGS out of error_entry() and make error_entry()
> > works on the stack normally.
> >
> > After this, XENPV doesn't need error_entry() since PUSH_AND_CLEAR_REGS
> > is moved out and error_entry() can be converted to C code in future
> > since it doesn't fiddle the stack.
>
> This is not a justification for this size increase:
>
>    text    data     bss     dec     hex filename
> 16060616        128131358       36384888        180576862       ac3625e vmlinux.before
> 16065626        128131358       36380792        180577776       ac365f0 vmlinux.after
>
> ~5K text increase already with my tailored config.
>
> You can have a asm_error_entry(), written in asm, which does the regs
> pushing and which calls error_entry() - the latter being the C version.
> And no need for the size increase.

The mapped size for the text is always 2M when the kernel is booted
since it is 2M-aligned.  So I don't think the size is a concern.

The only concern is the footprint when different interrupts and
exceptions happen heavily at the same time.  In this case, different
copies of PUSH_AND_CLEAR_REGS in the text will be touched.

For example, a heavy page fault and IPI or timer at the same time.
I'm not sure if it is a real case.

I'm Okay with asm_error_entry().  And also we can use an ASM function
containing PUSH_AND_CLEAR_REGS only.

Thanks
Lai

  reply	other threads:[~2022-04-12 13:53 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-12 12:15 [PATCH V5 0/7] x86/entry: Clean up entry code Lai Jiangshan
2022-04-12 12:15 ` [PATCH V5 1/7] x86/traps: Move pt_regs only in fixup_bad_iret() Lai Jiangshan
2022-04-12 12:15 ` [PATCH V5 2/7] x86/entry: Switch the stack after error_entry() returns Lai Jiangshan
2022-04-12 12:15 ` [PATCH V5 3/7] x86/entry: Move PUSH_AND_CLEAR_REGS out of error_entry() Lai Jiangshan
2022-04-12 13:26   ` Borislav Petkov
2022-04-12 13:52     ` Lai Jiangshan [this message]
2022-04-12 14:30       ` Borislav Petkov
2022-04-13  3:48         ` Lai Jiangshan
2022-04-13  8:39           ` Borislav Petkov
2022-04-12 12:15 ` [PATCH V5 4/7] x86/entry: Move cld to the start of idtentry macro Lai Jiangshan
2022-04-12 12:15 ` [PATCH V5 5/7] x86/entry: Don't call error_entry() for XENPV Lai Jiangshan
2022-04-20 16:32   ` Borislav Petkov
2022-04-12 12:15 ` [PATCH V5 6/7] x86/entry: Convert SWAPGS to swapgs and remove the definition of SWAPGS Lai Jiangshan
2022-04-12 12:15 ` [PATCH V5 7/7] x86/entry: Use idtentry macro for entry_INT80_compat Lai Jiangshan
2022-04-25 10:24   ` Thomas Gleixner
2022-04-25 13:25     ` Lai Jiangshan

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='CAJhGHyAsPZAeXUoOa5LJ5bxuMOWzg=cvYNYPVT9kpBM7Tsf3xA@mail.gmail.com' \
    --to=jiangshanlai@gmail.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=jiangshan.ljs@antgroup.com \
    --cc=jpoimboe@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /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.