Loading arch/arm64/kernel/entry.S +36 −3 Original line number Diff line number Diff line Loading @@ -73,10 +73,26 @@ .macro kernel_ventry, el, label, regsize = 64 .align 7 #ifdef CONFIG_UNMAP_KERNEL_AT_EL0 .if \el == 0 .if \regsize == 64 mrs x30, tpidrro_el0 msr tpidrro_el0, xzr .else mov x30, xzr .endif .endif #endif sub sp, sp, #S_FRAME_SIZE b el\()\el\()_\label .endm .macro tramp_alias, dst, sym mov_q \dst, TRAMP_VALIAS add \dst, \dst, #(\sym - .entry.tramp.text) .endm .macro kernel_entry, el, regsize = 64 .if \regsize == 32 mov w0, w0 // zero upper 32 bits of x0 Loading Loading @@ -217,18 +233,20 @@ alternative_else_nop_endif .if \el == 0 ldr x23, [sp, #S_SP] // load return stack pointer msr sp_el0, x23 tst x22, #PSR_MODE32_BIT // native task? b.eq 3f #ifdef CONFIG_ARM64_ERRATUM_845719 alternative_if ARM64_WORKAROUND_845719 tbz x22, #4, 1f #ifdef CONFIG_PID_IN_CONTEXTIDR mrs x29, contextidr_el1 msr contextidr_el1, x29 #else msr contextidr_el1, xzr #endif 1: alternative_else_nop_endif #endif 3: .endif msr elr_el1, x21 // set up the return data Loading @@ -250,7 +268,22 @@ alternative_else_nop_endif ldp x28, x29, [sp, #16 * 14] ldr lr, [sp, #S_LR] add sp, sp, #S_FRAME_SIZE // restore sp eret // return to kernel #ifndef CONFIG_UNMAP_KERNEL_AT_EL0 eret #else .if \el == 0 bne 4f msr far_el1, x30 tramp_alias x30, tramp_exit_native br x30 4: tramp_alias x30, tramp_exit_compat br x30 .else eret .endif #endif .endm .macro irq_stack_entry Loading Loading
arch/arm64/kernel/entry.S +36 −3 Original line number Diff line number Diff line Loading @@ -73,10 +73,26 @@ .macro kernel_ventry, el, label, regsize = 64 .align 7 #ifdef CONFIG_UNMAP_KERNEL_AT_EL0 .if \el == 0 .if \regsize == 64 mrs x30, tpidrro_el0 msr tpidrro_el0, xzr .else mov x30, xzr .endif .endif #endif sub sp, sp, #S_FRAME_SIZE b el\()\el\()_\label .endm .macro tramp_alias, dst, sym mov_q \dst, TRAMP_VALIAS add \dst, \dst, #(\sym - .entry.tramp.text) .endm .macro kernel_entry, el, regsize = 64 .if \regsize == 32 mov w0, w0 // zero upper 32 bits of x0 Loading Loading @@ -217,18 +233,20 @@ alternative_else_nop_endif .if \el == 0 ldr x23, [sp, #S_SP] // load return stack pointer msr sp_el0, x23 tst x22, #PSR_MODE32_BIT // native task? b.eq 3f #ifdef CONFIG_ARM64_ERRATUM_845719 alternative_if ARM64_WORKAROUND_845719 tbz x22, #4, 1f #ifdef CONFIG_PID_IN_CONTEXTIDR mrs x29, contextidr_el1 msr contextidr_el1, x29 #else msr contextidr_el1, xzr #endif 1: alternative_else_nop_endif #endif 3: .endif msr elr_el1, x21 // set up the return data Loading @@ -250,7 +268,22 @@ alternative_else_nop_endif ldp x28, x29, [sp, #16 * 14] ldr lr, [sp, #S_LR] add sp, sp, #S_FRAME_SIZE // restore sp eret // return to kernel #ifndef CONFIG_UNMAP_KERNEL_AT_EL0 eret #else .if \el == 0 bne 4f msr far_el1, x30 tramp_alias x30, tramp_exit_native br x30 4: tramp_alias x30, tramp_exit_compat br x30 .else eret .endif #endif .endm .macro irq_stack_entry Loading