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 <han_...@c-sky.com> CC: Guo Ren <guo...@kernel.org> CC: linux-c...@vger.kernel.org --- arch/csky/kernel/perf_event.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/csky/kernel/perf_event.c b/arch/csky/kernel/perf_event.c index de95005..011fd9b 100644 --- a/arch/csky/kernel/perf_event.c +++ b/arch/csky/kernel/perf_event.c @@ -983,6 +983,12 @@ static int csky_pmu_event_init(struct perf_event *event) struct hw_perf_event *hwc = &event->hw; int ret; + if (event->attr.type != PERF_TYPE_HARDWARE && + event->attr.type != PERF_TYPE_HW_CACHE && + event->attr.type != PERF_TYPE_RAW) { + return -ENOENT; + } + if (event->attr.exclude_user) csky_pmu.hpcr = BIT(2); else if (event->attr.exclude_kernel) -- 2.7.4