[RFC v2 10/12] powerpc: Read AMR only if pkey-violation caused the exception.

From: Ram Pai
Date: Fri Jun 16 2017 - 23:53:30 EST


Signed-off-by: Ram Pai <linuxram@xxxxxxxxxx>
---
arch/powerpc/kernel/exceptions-64s.S | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
index 8db9ef8..a4de1b4 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -493,13 +493,15 @@ EXC_COMMON_BEGIN(data_access_common)
ld r12,_MSR(r1)
ld r3,PACA_EXGEN+EX_DAR(r13)
lwz r4,PACA_EXGEN+EX_DSISR(r13)
+ std r3,_DAR(r1)
+ std r4,_DSISR(r1)
#ifdef CONFIG_PPC64_MEMORY_PROTECTION_KEYS
+ andis. r0,r4,DSISR_KEYFAULT@h /* save AMR only if its a key fault */
+ beq+ 1f
mfspr r5,SPRN_AMR
std r5,PACA_AMR(r13)
#endif /* CONFIG_PPC64_MEMORY_PROTECTION_KEYS */
- li r5,0x300
- std r3,_DAR(r1)
- std r4,_DSISR(r1)
+1: li r5,0x300
BEGIN_MMU_FTR_SECTION
b do_hash_page /* Try to handle as hpte fault */
MMU_FTR_SECTION_ELSE
@@ -565,13 +567,15 @@ EXC_COMMON_BEGIN(instruction_access_common)
ld r12,_MSR(r1)
ld r3,_NIP(r1)
andis. r4,r12,0x5820
+ std r3,_DAR(r1)
+ std r4,_DSISR(r1)
#ifdef CONFIG_PPC64_MEMORY_PROTECTION_KEYS
+ andis. r0,r4,DSISR_KEYFAULT@h /* save AMR only if its a key fault */
+ beq+ 1f
mfspr r5,SPRN_AMR
std r5,PACA_AMR(r13)
#endif /* CONFIG_PPC64_MEMORY_PROTECTION_KEYS */
- li r5,0x400
- std r3,_DAR(r1)
- std r4,_DSISR(r1)
+1: li r5,0x400
BEGIN_MMU_FTR_SECTION
b do_hash_page /* Try to handle as hpte fault */
MMU_FTR_SECTION_ELSE
--
1.8.3.1