summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/perf
diff options
context:
space:
mode:
authorNaveen N. Rao2017-06-13 20:42:00 +0200
committerMichael Ellerman2017-06-16 11:49:43 +0200
commitd89ba5353f301971dd7d2f9fdf25c4432728f38e (patch)
treef6d6a0b27dc9f81daa893d0c5722830d053a5393 /arch/powerpc/perf
parentpowerpc/kprobes: Skip livepatch_handler() for jprobes (diff)
downloadkernel-qcow2-linux-d89ba5353f301971dd7d2f9fdf25c4432728f38e.tar.gz
kernel-qcow2-linux-d89ba5353f301971dd7d2f9fdf25c4432728f38e.tar.xz
kernel-qcow2-linux-d89ba5353f301971dd7d2f9fdf25c4432728f38e.zip
powerpc/64s: Handle data breakpoints in Radix mode
On Power9, trying to use data breakpoints throws the splat shown below. This is because the check for a data breakpoint in DSISR is in do_hash_page(), which is not called when in Radix mode. Unable to handle kernel paging request for data at address 0xc000000000e19218 Faulting instruction address: 0xc0000000001155e8 cpu 0x0: Vector: 300 (Data Access) at [c0000000ef1e7b20] pc: c0000000001155e8: find_pid_ns+0x48/0xe0 lr: c000000000116ac4: find_task_by_vpid+0x44/0x90 sp: c0000000ef1e7da0 msr: 9000000000009033 dar: c000000000e19218 dsisr: 400000 Move the check to handle_page_fault() so as to catch data breakpoints in both Hash and Radix MMU modes. We have to change the check in do_hash_page() against 0xa410 to use 0xa450, so as to include the value of (DSISR_DABRMATCH << 16). There are two sites that call handle_page_fault() when in Radix, both already pass DSISR in r4. Fixes: caca285e5ab4 ("powerpc/mm/radix: Use STD_MMU_64 to properly isolate hash related code") Cc: stable@vger.kernel.org # v4.7+ Reported-by: Shriya R. Kulkarni <shriykul@in.ibm.com> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> [mpe: Fix the fall-through case on hash, we need to reload DSISR] Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/perf')
0 files changed, 0 insertions, 0 deletions