diff options
Diffstat (limited to 'kernel/events/hw_breakpoint.c')
-rw-r--r-- | kernel/events/hw_breakpoint.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/kernel/events/hw_breakpoint.c b/kernel/events/hw_breakpoint.c index ee706ce44aa0..bb38c4d3ee12 100644 --- a/kernel/events/hw_breakpoint.c +++ b/kernel/events/hw_breakpoint.c | |||
@@ -581,6 +581,12 @@ static int hw_breakpoint_event_init(struct perf_event *bp) | |||
581 | if (bp->attr.type != PERF_TYPE_BREAKPOINT) | 581 | if (bp->attr.type != PERF_TYPE_BREAKPOINT) |
582 | return -ENOENT; | 582 | return -ENOENT; |
583 | 583 | ||
584 | /* | ||
585 | * no branch sampling for breakpoint events | ||
586 | */ | ||
587 | if (has_branch_stack(bp)) | ||
588 | return -EOPNOTSUPP; | ||
589 | |||
584 | err = register_perf_hw_breakpoint(bp); | 590 | err = register_perf_hw_breakpoint(bp); |
585 | if (err) | 591 | if (err) |
586 | return err; | 592 | return err; |
@@ -613,6 +619,11 @@ static void hw_breakpoint_stop(struct perf_event *bp, int flags) | |||
613 | bp->hw.state = PERF_HES_STOPPED; | 619 | bp->hw.state = PERF_HES_STOPPED; |
614 | } | 620 | } |
615 | 621 | ||
622 | static int hw_breakpoint_event_idx(struct perf_event *bp) | ||
623 | { | ||
624 | return 0; | ||
625 | } | ||
626 | |||
616 | static struct pmu perf_breakpoint = { | 627 | static struct pmu perf_breakpoint = { |
617 | .task_ctx_nr = perf_sw_context, /* could eventually get its own */ | 628 | .task_ctx_nr = perf_sw_context, /* could eventually get its own */ |
618 | 629 | ||
@@ -622,6 +633,8 @@ static struct pmu perf_breakpoint = { | |||
622 | .start = hw_breakpoint_start, | 633 | .start = hw_breakpoint_start, |
623 | .stop = hw_breakpoint_stop, | 634 | .stop = hw_breakpoint_stop, |
624 | .read = hw_breakpoint_pmu_read, | 635 | .read = hw_breakpoint_pmu_read, |
636 | |||
637 | .event_idx = hw_breakpoint_event_idx, | ||
625 | }; | 638 | }; |
626 | 639 | ||
627 | int __init init_hw_breakpoint(void) | 640 | int __init init_hw_breakpoint(void) |