[PATCH V3 0/7] x86/entry: Clean up entry code

Lai Jiangshan posted 7 patches 4 years, 3 months ago
There is a newer version of this series
arch/x86/entry/entry_64.S        |  61 +++++++++++++-----
arch/x86/entry/entry_64_compat.S | 105 +------------------------------
arch/x86/include/asm/idtentry.h  |  47 ++++++++++++++
arch/x86/include/asm/irqflags.h  |   8 ---
arch/x86/include/asm/proto.h     |   4 --
arch/x86/include/asm/traps.h     |   2 +-
arch/x86/kernel/traps.c          |  17 ++---
7 files changed, 100 insertions(+), 144 deletions(-)
[PATCH V3 0/7] x86/entry: Clean up entry code
Posted by Lai Jiangshan 4 years, 3 months ago
From: Lai Jiangshan <jiangshan.ljs@antgroup.com>

This patchset moves the stack-switch code to the place where
error_entry() return, unravels error_entry() from XENpv and makes
entry_INT80_compat use idtentry macro.

This patchset is highly related to XENpv, because it does the extra
cleanup to convert SWAPGS to swapgs after major cleanup is done.

The patches are the third try to pick patches from the patchset
https://lore.kernel.org/lkml/20211126101209.8613-1-jiangshanlai@gmail.com/
which converts ASM code to C code.  These patches are prepared for that
purpose.  But this patchset has it own value: it simplifies the stack
switch, avoids leaving the old stack inside a function call, and
separates XENpv code with native code without adding new code.

Changed from V2:
	Make the patch of folding int80 thing as the first patch
	Add more changelog in "Switch the stack after error_entry() returns"

Changed from V1
	Squash cleanup patches converting SWAPGS to swapgs into one patch

	Use my official email address (Ant Group).  The work is backed
	by my company and I was incorrectly misunderstood that
	XXX@linux.alibaba.com is the only portal for opensource work
	in the corporate group.

[V2]: https://lore.kernel.org/lkml/20220303035434.20471-1-jiangshanlai@gmail.com/
[V1]: https://lore.kernel.org/lkml/20211208110833.65366-1-jiangshanlai@gmail.com/

Lai Jiangshan (7):
  x86/entry: Use idtentry macro for entry_INT80_compat
  x86/traps: Move pt_regs only in fixup_bad_iret()
  x86/entry: Switch the stack after error_entry() returns
  x86/entry: move PUSH_AND_CLEAR_REGS out of error_entry
  x86/entry: Move cld to the start of idtentry
  x86/entry: Don't call error_entry for XENPV
  x86/entry: Convert SWAPGS to swapgs and remove the definition of
    SWAPGS

 arch/x86/entry/entry_64.S        |  61 +++++++++++++-----
 arch/x86/entry/entry_64_compat.S | 105 +------------------------------
 arch/x86/include/asm/idtentry.h  |  47 ++++++++++++++
 arch/x86/include/asm/irqflags.h  |   8 ---
 arch/x86/include/asm/proto.h     |   4 --
 arch/x86/include/asm/traps.h     |   2 +-
 arch/x86/kernel/traps.c          |  17 ++---
 7 files changed, 100 insertions(+), 144 deletions(-)

-- 
2.19.1.6.gb485710b
Re: [PATCH V3 0/7] x86/entry: Clean up entry code
Posted by Peter Zijlstra 4 years, 3 months ago
On Tue, Mar 15, 2022 at 03:39:42PM +0800, Lai Jiangshan wrote:

> Lai Jiangshan (7):
>   x86/entry: Use idtentry macro for entry_INT80_compat
>   x86/traps: Move pt_regs only in fixup_bad_iret()
>   x86/entry: Switch the stack after error_entry() returns
>   x86/entry: move PUSH_AND_CLEAR_REGS out of error_entry
>   x86/entry: Move cld to the start of idtentry
>   x86/entry: Don't call error_entry for XENPV
>   x86/entry: Convert SWAPGS to swapgs and remove the definition of
>     SWAPGS

So AFAICT these patches are indeed correct.

I do however worry a little bit about the I$ impact of patch 4, and
there's a few niggles, but otherwise looks good.

I'd love for some of the other x86 people to also look at this, but a
tentative ACK on this.
Re: [PATCH V3 0/7] x86/entry: Clean up entry code
Posted by Peter Zijlstra 4 years, 3 months ago
On Wed, Mar 16, 2022 at 04:12:21PM +0100, Peter Zijlstra wrote:
> On Tue, Mar 15, 2022 at 03:39:42PM +0800, Lai Jiangshan wrote:
> 
> > Lai Jiangshan (7):
> >   x86/entry: Use idtentry macro for entry_INT80_compat
> >   x86/traps: Move pt_regs only in fixup_bad_iret()
> >   x86/entry: Switch the stack after error_entry() returns
> >   x86/entry: move PUSH_AND_CLEAR_REGS out of error_entry
> >   x86/entry: Move cld to the start of idtentry
> >   x86/entry: Don't call error_entry for XENPV
> >   x86/entry: Convert SWAPGS to swapgs and remove the definition of
> >     SWAPGS
> 
> So AFAICT these patches are indeed correct.
> 
> I do however worry a little bit about the I$ impact of patch 4, and
> there's a few niggles, but otherwise looks good.
> 
> I'd love for some of the other x86 people to also look at this, but a
> tentative ACK on this.
> 

Also, I forgot to mention; they no longer apply cleanly because I
sprinked ENDBR all over the place. Mostly trivial to fixup though.
Re: [PATCH V3 0/7] x86/entry: Clean up entry code
Posted by Lai Jiangshan 4 years, 3 months ago
On Wed, Mar 16, 2022 at 11:13 PM Peter Zijlstra <peterz@infradead.org> wrote:
>
> On Wed, Mar 16, 2022 at 04:12:21PM +0100, Peter Zijlstra wrote:
> > On Tue, Mar 15, 2022 at 03:39:42PM +0800, Lai Jiangshan wrote:
> >
> > > Lai Jiangshan (7):
> > >   x86/entry: Use idtentry macro for entry_INT80_compat
> > >   x86/traps: Move pt_regs only in fixup_bad_iret()
> > >   x86/entry: Switch the stack after error_entry() returns
> > >   x86/entry: move PUSH_AND_CLEAR_REGS out of error_entry
> > >   x86/entry: Move cld to the start of idtentry
> > >   x86/entry: Don't call error_entry for XENPV
> > >   x86/entry: Convert SWAPGS to swapgs and remove the definition of
> > >     SWAPGS
> >
> > So AFAICT these patches are indeed correct.
> >
> > I do however worry a little bit about the I$ impact of patch 4, and
> > there's a few niggles, but otherwise looks good.
> >
> > I'd love for some of the other x86 people to also look at this, but a
> > tentative ACK on this.
> >
>
> Also, I forgot to mention; they no longer apply cleanly because I
> sprinked ENDBR all over the place. Mostly trivial to fixup though.


They can still be applied to the newest tip/master which already has
sprinked ENDBR.  Is there a more proper branch for me to rebase the
patches onto?