From: mark.rutland@arm.com (Mark Rutland)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 8/9] arm64: head.S: use ordinary stack frame for __primary_switched()
Date: Tue, 30 Aug 2016 15:38:25 +0100 [thread overview]
Message-ID: <20160830143825.GK1223@leverpostej> (raw)
In-Reply-To: <1472049366-10922-9-git-send-email-ard.biesheuvel@linaro.org>
On Wed, Aug 24, 2016 at 04:36:05PM +0200, Ard Biesheuvel wrote:
> Instead of stashing the value of the link register in x28 before setting
> up the stack and calling into C code, create an ordinary PCS compatible
> stack frame so that we can push the return address onto the stack.
>
> Since exception handlers require a stack as well, assign the stach pointer
> register before installing the vector table.
Nit: s/stach/stack/
> Note that this accounts for the difference between THREAD_START_SP and
> THREAD_SIZE, given that the stack pointer is always decremented before
> calling into any C code.
>
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Mark Rutland <mark.rutland@arm.com>
Mark.
> ---
> arch/arm64/kernel/head.S | 18 +++++++++---------
> 1 file changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
> index 27f51272de68..ad1dc61d67ac 100644
> --- a/arch/arm64/kernel/head.S
> +++ b/arch/arm64/kernel/head.S
> @@ -415,13 +415,18 @@ ENDPROC(__create_page_tables)
> *
> * x0 = __PHYS_OFFSET
> */
> - .set initial_sp, init_thread_union + THREAD_START_SP
> __primary_switched:
> - mov x28, lr // preserve LR
> + adrp x4, init_thread_union
> + add sp, x4, #THREAD_SIZE
> + msr sp_el0, x4 // Save thread_info
> +
> adr_l x8, vectors // load VBAR_EL1 with virtual
> msr vbar_el1, x8 // vector table address
> isb
>
> + stp xzr, x30, [sp, #-16]!
> + mov x29, sp
> +
> str_l x21, __fdt_pointer, x5 // Save FDT pointer
>
> ldr_l x4, kimage_vaddr // Save the offset between
> @@ -436,11 +441,6 @@ __primary_switched:
> bl __pi_memset
> dsb ishst // Make zero page visible to PTW
>
> - adr_l sp, initial_sp, x4
> - mov x4, sp
> - and x4, x4, #~(THREAD_SIZE - 1)
> - msr sp_el0, x4 // Save thread_info
> - mov x29, #0
> #ifdef CONFIG_KASAN
> bl kasan_early_init
> #endif
> @@ -452,8 +452,8 @@ __primary_switched:
> bl kaslr_early_init // parse FDT for KASLR options
> cbz x0, 0f // KASLR disabled? just proceed
> orr x23, x23, x0 // record KASLR offset
> - ret x28 // we must enable KASLR, return
> - // to __primary_switch()
> + ldp x29, x30, [sp], #16 // we must enable KASLR, return
> + ret // to __primary_switch()
> 0:
> #endif
> b start_kernel
> --
> 2.7.4
>
next prev parent reply other threads:[~2016-08-30 14:38 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-24 14:35 [PATCH v2 0/9] arm64: clean up early boot function calls Ard Biesheuvel
2016-08-24 14:35 ` [PATCH v2 1/9] arm64: kernel: get rid of x25 and x26 with 'global' scope Ard Biesheuvel
2016-08-24 14:35 ` [PATCH v2 2/9] arm64: kernel: fix style issues in sleep.S Ard Biesheuvel
2016-08-24 16:13 ` Mark Rutland
2016-08-24 14:36 ` [PATCH v2 3/9] arm64: kernel: use ordinary return/argument register for el2_setup() Ard Biesheuvel
2016-08-24 16:20 ` Mark Rutland
2016-08-24 14:36 ` [PATCH v2 4/9] arm64: head.S: move KASLR processing out of __enable_mmu() Ard Biesheuvel
2016-08-24 20:36 ` Mark Rutland
2016-08-24 20:44 ` Ard Biesheuvel
2016-08-24 20:46 ` Mark Rutland
2016-08-25 13:59 ` Ard Biesheuvel
2016-08-30 10:24 ` Mark Rutland
2016-08-30 13:45 ` Mark Rutland
2016-08-24 14:36 ` [PATCH v2 5/9] arm64: kernel: use x30 for __enable_mmu return address Ard Biesheuvel
2016-08-24 14:36 ` [PATCH v2 6/9] arm64: call __enable_mmu as an ordinary function for secondary/resume Ard Biesheuvel
2016-08-30 14:07 ` Mark Rutland
2016-08-24 14:36 ` [PATCH v2 7/9] arm64: kernel: drop use of x24 from primary boot path Ard Biesheuvel
2016-08-30 14:26 ` Mark Rutland
2016-08-24 14:36 ` [PATCH v2 8/9] arm64: head.S: use ordinary stack frame for __primary_switched() Ard Biesheuvel
2016-08-30 14:38 ` Mark Rutland [this message]
2016-08-24 14:36 ` [PATCH v2 9/9] arm64: head.S: document the use of callee saved registers Ard Biesheuvel
2016-08-30 14:43 ` Mark Rutland
2016-08-30 14:48 ` [PATCH v2 0/9] arm64: clean up early boot function calls Mark Rutland
2016-08-30 14:50 ` Ard Biesheuvel
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=20160830143825.GK1223@leverpostej \
--to=mark.rutland@arm.com \
--cc=linux-arm-kernel@lists.infradead.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.