From 3c72862e8f645c2e2a936646e3568b45e44c268a Mon Sep 17 00:00:00 2001 From: Amit Pundir Date: Fri, 5 May 2017 01:15:33 +0530 Subject: [PATCH] ANDROID: arm64: suspend: Restore the UAO state Upstream commit d08544127d9f ("arm64: suspend: Reconfigure PSTATE after resume from idle") when cherry-picked on LTS linux-4.4.y removed UAO reset code because UAO is not supported in linux-4.4.y. But common/android-4.4 has UAO support, added in Change-Id: I1a6a74a1f33b92d54368bd99387b55cf62930903 ("UPSTREAM: arm64: kernel: Add support for User Access Override"). This patch pick up the UAO specific changes of upstream commit dropped in LTS cherry-pick. Fixes: LTS commit 71710cd35a55 ("arm64: suspend: Reconfigure PSTATE after resume from idle") Signed-off-by: Amit Pundir --- arch/arm64/include/asm/exec.h | 3 +++ arch/arm64/kernel/process.c | 3 ++- arch/arm64/kernel/suspend.c | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/exec.h b/arch/arm64/include/asm/exec.h index db0563c23482..f7865dd9d868 100644 --- a/arch/arm64/include/asm/exec.h +++ b/arch/arm64/include/asm/exec.h @@ -18,6 +18,9 @@ #ifndef __ASM_EXEC_H #define __ASM_EXEC_H +#include + extern unsigned long arch_align_stack(unsigned long sp); +void uao_thread_switch(struct task_struct *next); #endif /* __ASM_EXEC_H */ diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c index 6f3fb46170bf..e6afea67f6c1 100644 --- a/arch/arm64/kernel/process.c +++ b/arch/arm64/kernel/process.c @@ -49,6 +49,7 @@ #include #include #include +#include #include #include #include @@ -379,7 +380,7 @@ static void tls_thread_switch(struct task_struct *next) } /* Restore the UAO state depending on next's addr_limit */ -static void uao_thread_switch(struct task_struct *next) +void uao_thread_switch(struct task_struct *next) { if (IS_ENABLED(CONFIG_ARM64_UAO)) { if (task_thread_info(next)->addr_limit == KERNEL_DS) diff --git a/arch/arm64/kernel/suspend.c b/arch/arm64/kernel/suspend.c index 20b6b9b02cc8..f42b8b8f1d0a 100644 --- a/arch/arm64/kernel/suspend.c +++ b/arch/arm64/kernel/suspend.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -106,6 +107,7 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long)) */ asm(ALTERNATIVE("nop", SET_PSTATE_PAN(1), ARM64_HAS_PAN, CONFIG_ARM64_PAN)); + uao_thread_switch(current); /* * Restore HW breakpoint registers to sane values -- 2.11.0