diff options
| author | Se Wang (Patrick) Oh <sewango@codeaurora.org> | 2015-10-17 00:57:45 -0700 |
|---|---|---|
| committer | Zhiqiang Tu <ztu@codeaurora.org> | 2017-03-24 11:05:22 +0800 |
| commit | e92e3ed647b1609045d0ecb66987da04f75e980b (patch) | |
| tree | c06369764a680cba021c3b17c5e153af5fef6a55 /arch/arm64/include/asm | |
| parent | d4b4dcba33e7dcc38b6080d75f799568212b9222 (diff) | |
arm64: fpsimd: Enable FP(floating-point) settings for msm8996
Enable FP and SIMD settings for the MSM8996 during the execution
of the AArch32 processes and disable these settings when you switch
to the AArch64 processes.
This commit also adds CONFIG_ENABLE_FP_SIMD_SETTINGS to support
FP and SIMD settings.
CRs-Fixed: 952837
Change-Id: If9537ca7390d8f08a6b48fb8865d1b349a93bcee
Signed-off-by: Se Wang (Patrick) Oh <sewango@codeaurora.org>
[ztu@codeaurora.org: Resolved conflicts]
Signed-off-by: Zhiqiang Tu <ztu@codeaurora.org>
Diffstat (limited to 'arch/arm64/include/asm')
| -rw-r--r-- | arch/arm64/include/asm/elf.h | 9 | ||||
| -rw-r--r-- | arch/arm64/include/asm/fpsimd.h | 12 |
2 files changed, 20 insertions, 1 deletions
diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index 7875c886ad24..e90414a367ed 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -23,6 +23,7 @@ */ #include <asm/ptrace.h> #include <asm/user.h> +#include <asm/fpsimd.h> /* * AArch64 static relocation types. @@ -182,7 +183,13 @@ typedef compat_elf_greg_t compat_elf_gregset_t[COMPAT_ELF_NGREG]; ((x)->e_flags & EF_ARM_EABI_MASK)) #define compat_start_thread compat_start_thread -#define COMPAT_SET_PERSONALITY(ex) set_thread_flag(TIF_32BIT); +#define COMPAT_SET_PERSONALITY(ex) \ +do { \ + if (current->mm) \ + fpsimd_enable_trap(); \ + set_thread_flag(TIF_32BIT); \ +} while (0) + #define COMPAT_ARCH_DLINFO extern int aarch32_setup_vectors_page(struct linux_binprm *bprm, int uses_interp); diff --git a/arch/arm64/include/asm/fpsimd.h b/arch/arm64/include/asm/fpsimd.h index 50f559f574fe..355871b7022f 100644 --- a/arch/arm64/include/asm/fpsimd.h +++ b/arch/arm64/include/asm/fpsimd.h @@ -81,6 +81,18 @@ extern void fpsimd_save_partial_state(struct fpsimd_partial_state *state, u32 num_regs); extern void fpsimd_load_partial_state(struct fpsimd_partial_state *state); +#ifdef CONFIG_ENABLE_FP_SIMD_SETTINGS +extern void fpsimd_disable_trap(void); +extern void fpsimd_enable_trap(void); +extern void fpsimd_settings_disable(void); +extern void fpsimd_settings_enable(void); +#else +static inline void fpsimd_disable_trap(void) {} +static inline void fpsimd_enable_trap(void) {} +static inline void fpsimd_settings_disable(void) {} +static inline void fpsimd_settings_enable(void) {} +#endif + #endif #endif |
