提交 974c8e45 编写于 作者: M Marc Zyngier 提交者: Catalin Marinas

arm64: fix el2_setup check of CurrentEL

The CurrentEL system register reports the Current Exception Level
of the CPU. It doesn't say anything about the stack handling, and
yet we compare it to PSR_MODE_EL2t and PSR_MODE_EL2h.

It works by chance because PSR_MODE_EL2t happens to match the right
bits, but that's otherwise a very bad idea. Just check for the EL
value instead.
Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
[catalin.marinas@arm.com: fixed arch/arm64/kernel/efi-entry.S]
Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
上级 923b8f50
...@@ -21,6 +21,10 @@ ...@@ -21,6 +21,10 @@
#include <uapi/asm/ptrace.h> #include <uapi/asm/ptrace.h>
/* Current Exception Level values, as contained in CurrentEL */
#define CurrentEL_EL1 (1 << 2)
#define CurrentEL_EL2 (2 << 2)
/* AArch32-specific ptrace requests */ /* AArch32-specific ptrace requests */
#define COMPAT_PTRACE_GETREGS 12 #define COMPAT_PTRACE_GETREGS 12
#define COMPAT_PTRACE_SETREGS 13 #define COMPAT_PTRACE_SETREGS 13
......
...@@ -78,8 +78,7 @@ ENTRY(efi_stub_entry) ...@@ -78,8 +78,7 @@ ENTRY(efi_stub_entry)
/* Turn off Dcache and MMU */ /* Turn off Dcache and MMU */
mrs x0, CurrentEL mrs x0, CurrentEL
cmp x0, #PSR_MODE_EL2t cmp x0, #CurrentEL_EL2
ccmp x0, #PSR_MODE_EL2h, #0x4, ne
b.ne 1f b.ne 1f
mrs x0, sctlr_el2 mrs x0, sctlr_el2
bic x0, x0, #1 << 0 // clear SCTLR.M bic x0, x0, #1 << 0 // clear SCTLR.M
......
...@@ -270,8 +270,7 @@ ENDPROC(stext) ...@@ -270,8 +270,7 @@ ENDPROC(stext)
*/ */
ENTRY(el2_setup) ENTRY(el2_setup)
mrs x0, CurrentEL mrs x0, CurrentEL
cmp x0, #PSR_MODE_EL2t cmp x0, #CurrentEL_EL2
ccmp x0, #PSR_MODE_EL2h, #0x4, ne
b.ne 1f b.ne 1f
mrs x0, sctlr_el2 mrs x0, sctlr_el2
CPU_BE( orr x0, x0, #(1 << 25) ) // Set the EE bit for EL2 CPU_BE( orr x0, x0, #(1 << 25) ) // Set the EE bit for EL2
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册