lkml.org 
[lkml]   [2021]   [Sep]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 11/24] x86/entry: Replace the most of asm code of error_entry to C code
    On Wed, Sep 01, 2021 at 01:50:12AM +0800, Lai Jiangshan wrote:
    > diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
    > index 42d2918f5646..bc9e2f5ad370 100644
    > --- a/arch/x86/entry/entry_64.S
    > +++ b/arch/x86/entry/entry_64.S
    > @@ -972,83 +972,14 @@ SYM_CODE_START_LOCAL(error_entry)
    > cld
    > PUSH_AND_CLEAR_REGS save_ret=1
    > ENCODE_FRAME_POINTER 8
    >
    > popq %r12 /* save return addr in %12 */
    > movq %rsp, %rdi /* arg0 = pt_regs pointer */
    > + call do_error_entry
    > movq %rax, %rsp /* switch stack */
    > ENCODE_FRAME_POINTER
    > pushq %r12
    > ret

    There's only a single error_entry callsite, which is idtentry_body. One
    of the things I wanted to do is change this lot so we change to the
    task_stack in 'C', using an adaptation of call_on_irqstack() and
    basically don't return frrom C until we're done with \cfunc.

    That is, once we call C, stay there, and don't do this back and forth
    between C and asm.

    As is, the resulting asm in error_entry is somewhat confusing given that
    we sometimes don't actually switch stacks.

    \
     
     \ /
      Last update: 2021-09-02 12:17    [W:4.083 / U:25.176 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site