• Naveen N. Rao's avatar
    powerpc/64s: Handle data breakpoints in Radix mode · d89ba535
    Naveen N. Rao authored
    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: caca285e ("powerpc/mm/radix: Use STD_MMU_64 to properly isolate hash related code")
    Cc: stable@vger.kernel.org # v4.7+
    Reported-by: default avatarShriya R. Kulkarni <shriykul@in.ibm.com>
    Signed-off-by: default avatarNaveen 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: default avatarMichael Ellerman <mpe@ellerman.id.au>
    d89ba535
exceptions-64s.S 44.3 KB