Skip to content

Commit

Permalink
csky: Fix perf record in kernel/user space
Browse files Browse the repository at this point in the history
csky_pmu_event_init is called several times during the perf record
initialzation. After configure the event counter in either kernel
space or user space, csky_pmu_event_init is called twice with no
attr specified. Configuration will be overwritten with sampling in
both kernel space and user space. --all-kernel/--all-user is
useless without this patch applied.

Signed-off-by: Mao Han <[email protected]>
Signed-off-by: Guo Ren <[email protected]>
  • Loading branch information
Mao Han authored and guoren83 committed Jul 19, 2019
1 parent f622fbf commit d41435d
Showing 1 changed file with 14 additions and 12 deletions.
26 changes: 14 additions & 12 deletions arch/csky/kernel/perf_event.c
Original file line number Diff line number Diff line change
Expand Up @@ -922,15 +922,6 @@ static int csky_pmu_event_init(struct perf_event *event)
struct hw_perf_event *hwc = &event->hw;
int ret;

if (event->attr.exclude_user)
csky_pmu.hpcr = BIT(2);
else if (event->attr.exclude_kernel)
csky_pmu.hpcr = BIT(3);
else
csky_pmu.hpcr = BIT(2) | BIT(3);

csky_pmu.hpcr |= BIT(1) | BIT(0);

switch (event->attr.type) {
case PERF_TYPE_HARDWARE:
if (event->attr.config >= PERF_COUNT_HW_MAX)
Expand All @@ -939,21 +930,32 @@ static int csky_pmu_event_init(struct perf_event *event)
if (ret == HW_OP_UNSUPPORTED)
return -ENOENT;
hwc->idx = ret;
return 0;
break;
case PERF_TYPE_HW_CACHE:
ret = csky_pmu_cache_event(event->attr.config);
if (ret == CACHE_OP_UNSUPPORTED)
return -ENOENT;
hwc->idx = ret;
return 0;
break;
case PERF_TYPE_RAW:
if (hw_raw_read_mapping[event->attr.config] == NULL)
return -ENOENT;
hwc->idx = event->attr.config;
return 0;
break;
default:
return -ENOENT;
}

if (event->attr.exclude_user)
csky_pmu.hpcr = BIT(2);
else if (event->attr.exclude_kernel)
csky_pmu.hpcr = BIT(3);
else
csky_pmu.hpcr = BIT(2) | BIT(3);

csky_pmu.hpcr |= BIT(1) | BIT(0);

return 0;
}

/* starts all counters */
Expand Down

0 comments on commit d41435d

Please sign in to comment.