When using SIG_DBG_BRANCH_TRACING, MSR.BE is left enabled in the
user context when single_step_exception() prepares the SIGTRAP
delivery.  The resulting branch-trap-within-the-SIGTRAP-handler
isn't healthy.
Commit 
2538c2d08f46141550a1e68819efa8fe31c6e3dc broke this, by
replacing an MSR mask operation of ~(MSR_SE | MSR_BE) with a call
to clear_single_step() which only clears MSR_SE.
This patch adds a new helper, clear_br_trace(), which clears the
debug trap before invoking the signal handler.  This helper is a
NOP for BookE as SIG_DBG_BRANCH_TRACING isn't supported on BookE.
Signed-off-by: Matt Evans <matt@ozlabs.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
 /* single-step stuff */
 #define single_stepping(regs)  (current->thread.debug.dbcr0 & DBCR0_IC)
 #define clear_single_step(regs)        (current->thread.debug.dbcr0 &= ~DBCR0_IC)
-
+#define clear_br_trace(regs)   do {} while(0)
 #else
 /* On non-4xx, the reason for the machine check or program
    exception is in the MSR. */
 
 #define single_stepping(regs)  ((regs)->msr & MSR_SE)
 #define clear_single_step(regs)        ((regs)->msr &= ~MSR_SE)
+#define clear_br_trace(regs)   ((regs)->msr &= ~MSR_BE)
 #endif
 
 #if defined(CONFIG_E500)
        enum ctx_state prev_state = exception_enter();
 
        clear_single_step(regs);
+       clear_br_trace(regs);
 
        if (kprobe_post_handler(regs))
                return;