summaryrefslogtreecommitdiff
path: root/arch/arm64/kernel/sleep.S
diff options
context:
space:
mode:
authorJungseok Lee <jungseoklee85@gmail.com>2015-12-04 11:02:25 +0000
committerWill Deacon <will.deacon@arm.com>2015-12-08 11:40:48 +0000
commit6cdf9c7ca687e01840d0215437620a20263012fc (patch)
tree096f89d35adbe535b681e885c0214ea9eee7b463 /arch/arm64/kernel/sleep.S
parent5db4fd8c52810bd9740c1240ebf89223b171aa70 (diff)
downloadlwn-6cdf9c7ca687e01840d0215437620a20263012fc.tar.gz
lwn-6cdf9c7ca687e01840d0215437620a20263012fc.zip
arm64: Store struct thread_info in sp_el0
There is need for figuring out how to manage struct thread_info data when IRQ stack is introduced. struct thread_info information should be copied to IRQ stack under the current thread_info calculation logic whenever context switching is invoked. This is too expensive to keep supporting the approach. Instead, this patch pays attention to sp_el0 which is an unused scratch register in EL1 context. sp_el0 utilization not only simplifies the management, but also prevents text section size from being increased largely due to static allocated IRQ stack as removing masking operation using THREAD_SIZE in many places. Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Jungseok Lee <jungseoklee85@gmail.com> Signed-off-by: James Morse <james.morse@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/arm64/kernel/sleep.S')
-rw-r--r--arch/arm64/kernel/sleep.S3
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/arm64/kernel/sleep.S b/arch/arm64/kernel/sleep.S
index f586f7c875e2..e33fe33876ab 100644
--- a/arch/arm64/kernel/sleep.S
+++ b/arch/arm64/kernel/sleep.S
@@ -173,6 +173,9 @@ ENTRY(cpu_resume)
/* load physical address of identity map page table in x1 */
adrp x1, idmap_pg_dir
mov sp, x2
+ /* save thread_info */
+ and x2, x2, #~(THREAD_SIZE - 1)
+ msr sp_el0, x2
/*
* cpu_do_resume expects x0 to contain context physical address
* pointer and x1 to contain physical address of 1:1 page tables