diff options
| -rw-r--r-- | arch/s390/kernel/kprobes.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/arch/s390/kernel/kprobes.c b/arch/s390/kernel/kprobes.c index a466bab6677e..8af549e95730 100644 --- a/arch/s390/kernel/kprobes.c +++ b/arch/s390/kernel/kprobes.c | |||
| @@ -337,21 +337,14 @@ static int __kprobes kprobe_handler(struct pt_regs *regs) | |||
| 337 | } | 337 | } |
| 338 | 338 | ||
| 339 | p = get_kprobe(addr); | 339 | p = get_kprobe(addr); |
| 340 | if (!p) { | 340 | if (!p) |
| 341 | if (*addr != BREAKPOINT_INSTRUCTION) { | 341 | /* |
| 342 | /* | 342 | * No kprobe at this address. The fault has not been |
| 343 | * The breakpoint instruction was removed right | 343 | * caused by a kprobe breakpoint. The race of breakpoint |
| 344 | * after we hit it. Another cpu has removed | 344 | * vs. kprobe remove does not exist because on s390 we |
| 345 | * either a probepoint or a debugger breakpoint | 345 | * use stop_machine_run to arm/disarm the breakpoints. |
| 346 | * at this address. In either case, no further | 346 | */ |
| 347 | * handling of this interrupt is appropriate. | ||
| 348 | * | ||
| 349 | */ | ||
| 350 | ret = 1; | ||
| 351 | } | ||
| 352 | /* Not one of ours: let kernel handle it */ | ||
| 353 | goto no_kprobe; | 347 | goto no_kprobe; |
| 354 | } | ||
| 355 | 348 | ||
| 356 | kcb->kprobe_status = KPROBE_HIT_ACTIVE; | 349 | kcb->kprobe_status = KPROBE_HIT_ACTIVE; |
| 357 | set_current_kprobe(p, regs, kcb); | 350 | set_current_kprobe(p, regs, kcb); |
