diff options
Diffstat (limited to 'kernel/events/hw_breakpoint.c')
| -rw-r--r-- | kernel/events/hw_breakpoint.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/kernel/events/hw_breakpoint.c b/kernel/events/hw_breakpoint.c index b3814fce5ecb..d6b56180827c 100644 --- a/kernel/events/hw_breakpoint.c +++ b/kernel/events/hw_breakpoint.c | |||
| @@ -509,6 +509,8 @@ modify_user_hw_breakpoint_check(struct perf_event *bp, struct perf_event_attr *a | |||
| 509 | */ | 509 | */ |
| 510 | int modify_user_hw_breakpoint(struct perf_event *bp, struct perf_event_attr *attr) | 510 | int modify_user_hw_breakpoint(struct perf_event *bp, struct perf_event_attr *attr) |
| 511 | { | 511 | { |
| 512 | int err; | ||
| 513 | |||
| 512 | /* | 514 | /* |
| 513 | * modify_user_hw_breakpoint can be invoked with IRQs disabled and hence it | 515 | * modify_user_hw_breakpoint can be invoked with IRQs disabled and hence it |
| 514 | * will not be possible to raise IPIs that invoke __perf_event_disable. | 516 | * will not be possible to raise IPIs that invoke __perf_event_disable. |
| @@ -520,15 +522,12 @@ int modify_user_hw_breakpoint(struct perf_event *bp, struct perf_event_attr *att | |||
| 520 | else | 522 | else |
| 521 | perf_event_disable(bp); | 523 | perf_event_disable(bp); |
| 522 | 524 | ||
| 523 | if (!attr->disabled) { | 525 | err = modify_user_hw_breakpoint_check(bp, attr, false); |
| 524 | int err = modify_user_hw_breakpoint_check(bp, attr, false); | ||
| 525 | 526 | ||
| 526 | if (err) | 527 | if (!bp->attr.disabled) |
| 527 | return err; | ||
| 528 | perf_event_enable(bp); | 528 | perf_event_enable(bp); |
| 529 | bp->attr.disabled = 0; | 529 | |
| 530 | } | 530 | return err; |
| 531 | return 0; | ||
| 532 | } | 531 | } |
| 533 | EXPORT_SYMBOL_GPL(modify_user_hw_breakpoint); | 532 | EXPORT_SYMBOL_GPL(modify_user_hw_breakpoint); |
| 534 | 533 | ||
