Once the jprobe instrumented function returns, it executes a jprobe_break
which is a break instruction with __IA64_JPROBE_BREAK value.  The current
patch checks for this break value, before assuming that jprobe instrumented
function just completed.
The previous code was not checking for this value and that was a bug.
Signed-off-by: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
        ia64_psr(regs)->ss = 1;
 }
 
-static int pre_kprobes_handler(struct pt_regs *regs)
+static int pre_kprobes_handler(struct die_args *args)
 {
        struct kprobe *p;
        int ret = 0;
+       struct pt_regs *regs = args->regs;
        kprobe_opcode_t *addr = (kprobe_opcode_t *)instruction_pointer(regs);
 
        preempt_disable();
                        }
                        arch_disarm_kprobe(p);
                        ret = 1;
-               } else {
+               } else if (args->err == __IA64_BREAK_JPROBE) {
                        /*
                         * jprobe instrumented function just completed
                         */
                        if (p->break_handler && p->break_handler(p, regs)) {
                                goto ss_probe;
                        }
+               } else {
+                       /* Not our break */
+                       goto no_kprobe;
                }
        }
 
        struct die_args *args = (struct die_args *)data;
        switch(val) {
        case DIE_BREAK:
-               if (pre_kprobes_handler(args->regs))
+               if (pre_kprobes_handler(args))
                        return NOTIFY_STOP;
                break;
        case DIE_SS: