mirror of
https://github.com/torvalds/linux.git
synced 2024-12-26 12:52:30 +00:00
arm64: compat: Add separate CP15 trapping hook
Instead of directly generating an UNDEF when trapping a CP15 access, let's add a new entry point to that effect (which only generates an UNDEF for now). Acked-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
parent
bd7ac140b8
commit
70c63cdfd6
@ -697,9 +697,9 @@ el0_sync_compat:
|
||||
cmp x24, #ESR_ELx_EC_UNKNOWN // unknown exception in EL0
|
||||
b.eq el0_undef
|
||||
cmp x24, #ESR_ELx_EC_CP15_32 // CP15 MRC/MCR trap
|
||||
b.eq el0_undef
|
||||
b.eq el0_cp15
|
||||
cmp x24, #ESR_ELx_EC_CP15_64 // CP15 MRRC/MCRR trap
|
||||
b.eq el0_undef
|
||||
b.eq el0_cp15
|
||||
cmp x24, #ESR_ELx_EC_CP14_MR // CP14 MRC/MCR trap
|
||||
b.eq el0_undef
|
||||
cmp x24, #ESR_ELx_EC_CP14_LS // CP14 LDC/STC trap
|
||||
@ -722,6 +722,17 @@ el0_irq_compat:
|
||||
el0_error_compat:
|
||||
kernel_entry 0, 32
|
||||
b el0_error_naked
|
||||
|
||||
el0_cp15:
|
||||
/*
|
||||
* Trapped CP15 (MRC, MCR, MRRC, MCRR) instructions
|
||||
*/
|
||||
enable_daif
|
||||
ct_user_exit
|
||||
mov x0, x25
|
||||
mov x1, sp
|
||||
bl do_cp15instr
|
||||
b ret_to_user
|
||||
#endif
|
||||
|
||||
el0_da:
|
||||
|
@ -547,6 +547,19 @@ static struct sys64_hook sys64_hooks[] = {
|
||||
{},
|
||||
};
|
||||
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
asmlinkage void __exception do_cp15instr(unsigned int esr, struct pt_regs *regs)
|
||||
{
|
||||
/*
|
||||
* New cp15 instructions may previously have been undefined at
|
||||
* EL0. Fall back to our usual undefined instruction handler
|
||||
* so that we handle these consistently.
|
||||
*/
|
||||
do_undefinstr(regs);
|
||||
}
|
||||
#endif
|
||||
|
||||
asmlinkage void __exception do_sysinstr(unsigned int esr, struct pt_regs *regs)
|
||||
{
|
||||
struct sys64_hook *hook;
|
||||
|
Loading…
Reference in New Issue
Block a user