powerpc/64s: Fix hash fault to use TRAP accessor
authorNicholas Piggin <npiggin@gmail.com>
Tue, 16 Mar 2021 10:52:05 +0000 (20:52 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 29 Mar 2021 02:22:15 +0000 (13:22 +1100)
Hash faults use the trap vector to decide whether this is an
instruction or data fault. This should use the TRAP accessor
rather than open access regs->trap.

This won't cause a problem at the moment because 64s only uses
trap flags for system call interrupts (the norestart flag), but
that could change if any other trap flags get used in future.

Fixes: a4922f5442e7e ("powerpc/64s: move the hash fault handling logic to C")
Suggested-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210316105205.407767-1-npiggin@gmail.com
arch/powerpc/mm/book3s64/hash_utils.c

index 581b20a2feaf610af74327f1fabbc2dccb0b080a..7719995323c3f24aaf183e813abcf08280ee2ba7 100644 (file)
@@ -1545,10 +1545,10 @@ DEFINE_INTERRUPT_HANDLER_RET(__do_hash_fault)
        if (user_mode(regs) || (region_id == USER_REGION_ID))
                access &= ~_PAGE_PRIVILEGED;
 
-       if (regs->trap == 0x400)
+       if (TRAP(regs) == 0x400)
                access |= _PAGE_EXEC;
 
-       err = hash_page_mm(mm, ea, access, regs->trap, flags);
+       err = hash_page_mm(mm, ea, access, TRAP(regs), flags);
        if (unlikely(err < 0)) {
                // failed to instert a hash PTE due to an hypervisor error
                if (user_mode(regs)) {