powerpc/hw_breakpoint: Only disable hw breakpoint if cpu supports it
authorNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Wed, 4 Apr 2018 10:41:16 +0000 (16:11 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 4 Apr 2018 11:54:02 +0000 (21:54 +1000)
We get the below warning if we try to use kexec on P9:
   kexec_core: Starting new kernel
   WARNING: CPU: 0 PID: 1223 at arch/powerpc/kernel/process.c:826 __set_breakpoint+0xb4/0x140
   [snip]
   NIP __set_breakpoint+0xb4/0x140
   LR  kexec_prepare_cpus_wait+0x58/0x150
   Call Trace:
     0xc0000000ee70fb20 (unreliable)
     0xc0000000ee70fb20
     default_machine_kexec+0x234/0x2c0
     machine_kexec+0x84/0x90
     kernel_kexec+0xd8/0xe0
     SyS_reboot+0x214/0x2c0
     system_call+0x58/0x6c

This happens since we are trying to clear hw breakpoint on POWER9,
though we don't have CPU_FTR_DAWR enabled. Guard __set_breakpoint()
within hw_breakpoint_disable() with ppc_breakpoint_available() to
address this.

Fixes: 9654153158d3 ("powerpc: Disable DAWR in the base POWER9 CPU features")
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/hw_breakpoint.h

index 90c708e5e7c4d17f66fc5d1baed8141b7db5325f..8e7b09703ca45dbe2592441e5520176024baee24 100644 (file)
@@ -80,7 +80,8 @@ static inline void hw_breakpoint_disable(void)
        brk.address = 0;
        brk.type = 0;
        brk.len = 0;
-       __set_breakpoint(&brk);
+       if (ppc_breakpoint_available())
+               __set_breakpoint(&brk);
 }
 extern void thread_change_pc(struct task_struct *tsk, struct pt_regs *regs);
 int hw_breakpoint_handler(struct die_args *args);