On Thu, 04 Jul 2019 21:55:57 +0200
Peter Zijlstra <[email protected]> wrote:

> --- a/arch/x86/entry/entry_32.S
> +++ b/arch/x86/entry/entry_32.S
> @@ -294,9 +294,11 @@
>  .Lfinished_frame_\@:
>  .endm
>  
> -.macro SAVE_ALL pt_regs_ax=%eax switch_stacks=0
> +.macro SAVE_ALL pt_regs_ax=%eax switch_stacks=0 skip_gs=0
>       cld
> +.if \skip_gs == 0
>       PUSH_GS
> +.endif
>       FIXUP_FRAME
>       pushl   %fs
>       pushl   %es
> @@ -313,13 +315,13 @@
>       movl    %edx, %es
>       movl    $(__KERNEL_PERCPU), %edx
>       movl    %edx, %fs
> +.if \skip_gs == 0
>       SET_KERNEL_GS %edx
> -
> +.endif
>       /* Switch to kernel stack if necessary */
>  .if \switch_stacks > 0
>       SWITCH_TO_KERNEL_STACK
>  .endif
> -
>  .endm
>  
>  .macro SAVE_ALL_NMI cr3_reg:req
> @@ -1448,32 +1450,20 @@ END(page_fault)
>  
>  common_exception:
>       /* the function address is in %gs's slot on the stack */
> -     FIXUP_FRAME
> -     pushl   %fs
> -     pushl   %es
> -     pushl   %ds
> -     pushl   %eax
> -     movl    $(__USER_DS), %eax
> -     movl    %eax, %ds
> -     movl    %eax, %es
> -     movl    $(__KERNEL_PERCPU), %eax
> -     movl    %eax, %fs
> -     pushl   %ebp
> -     pushl   %edi
> -     pushl   %esi
> -     pushl   %edx
> -     pushl   %ecx
> -     pushl   %ebx
> -     SWITCH_TO_KERNEL_STACK
> +     SAVE_ALL switch_stacks=1 skip_gs=1
>       ENCODE_FRAME_POINTER
> -     cld

The only code change of this is that cld moved from the end to the
beginning. As this appears to match other SAVE_ALL users with respect
to ENCODE_FRAME_POINTER, this shouldn't be an issue.

Reviewed-by: Steven Rostedt (VMware) <[email protected]>

-- Steve



>       UNWIND_ESPFIX_STACK
> +

Reply via email to