From: Masayoshi Mizuma <msys.mizuma@gmail.com> To: Rob Herring <robh@kernel.org> Cc: Will Deacon <will@kernel.org>, Catalin Marinas <catalin.marinas@arm.com>, Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>, Arnaldo Carvalho de Melo <acme@kernel.org>, Jiri Olsa <jolsa@redhat.com>, Mark Rutland <mark.rutland@arm.com>, Alexander Shishkin <alexander.shishkin@linux.intel.com>, honnappa.nagarahalli@arm.com, Zachary.Leaf@arm.com, Raphael Gault <raphael.gault@arm.com>, Jonathan Cameron <Jonathan.Cameron@huawei.com>, Namhyung Kim <namhyung@kernel.org>, Itaru Kitayama <itaru.kitayama@gmail.com>, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v7 7/9] perf: arm64: Add test for userspace counter access on heterogeneous systems Date: Fri, 30 Apr 2021 12:46:16 -0400 [thread overview] Message-ID: <20210430164616.pzb7yxrsugexso25@gabell> (raw) In-Reply-To: <20210420031511.2348977-8-robh@kernel.org> On Mon, Apr 19, 2021 at 10:15:09PM -0500, Rob Herring wrote: > Userspace counter access only works on heterogeneous systems with some > restrictions. The userspace process must be pinned to a homogeneous > subset of CPUs and must open the corresponding PMU for those CPUs. This > commit adds a test implementing these requirements. > > Signed-off-by: Rob Herring <robh@kernel.org> > --- > v6: > - Add a check on cap_user_rdpmc > v5: > - Adapt to libperf mmap API changes > v4: > - Update perf_evsel__mmap params > v2: > - Drop all but heterogeneous test as others covered by libperf tests > - Rework to use libperf > --- > tools/perf/arch/arm64/include/arch-tests.h | 7 + > tools/perf/arch/arm64/tests/Build | 1 + > tools/perf/arch/arm64/tests/arch-tests.c | 4 + > tools/perf/arch/arm64/tests/user-events.c | 177 +++++++++++++++++++++ > 4 files changed, 189 insertions(+) > create mode 100644 tools/perf/arch/arm64/tests/user-events.c > > diff --git a/tools/perf/arch/arm64/include/arch-tests.h b/tools/perf/arch/arm64/include/arch-tests.h > index 90ec4c8cb880..380ad34a3f09 100644 > --- a/tools/perf/arch/arm64/include/arch-tests.h > +++ b/tools/perf/arch/arm64/include/arch-tests.h > @@ -2,11 +2,18 @@ > #ifndef ARCH_TESTS_H > #define ARCH_TESTS_H > > +#include <linux/compiler.h> > + > #ifdef HAVE_DWARF_UNWIND_SUPPORT > struct thread; > struct perf_sample; > +int test__arch_unwind_sample(struct perf_sample *sample, > + struct thread *thread); > #endif Hello, I got the following compile error with aarch64 on Fedora33. # make tools/perf ... In file included from arch/arm64/tests/arch-tests.c:4: /root//libperf_v7/tools/perf/arch/arm64/include/arch-tests.h:10:5: error: redundant redeclaration of ‘test__arch_unwind_sample’ [-Werror=redundant-decls] 10 | int test__arch_unwind_sample(struct perf_sample *sample, | ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from arch/arm64/tests/arch-tests.c:3: /root//libperf_v7/tools/perf/tests/tests.h:140:5: note: previous declaration of ‘test__arch_unwind_sample’ was here 140 | int test__arch_unwind_sample(struct perf_sample *sample, | ^~~~~~~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors make[8]: *** [/root//libperf_v7/tools/build/Makefile.build:97: /root/libperf_v7/tools/perf/arch/arm64/tests/arch-tests.o] Error 1 make[8]: *** Waiting for unfinished jobs.... In file included from arch/arm64/tests/user-events.c:13: /root//libperf_v7/tools/perf/arch/arm64/include/arch-tests.h:10:5: error: redundant redeclaration of ‘test__arch_unwind_sample’ [-Werror=redundant-decls] 10 | int test__arch_unwind_sample(struct perf_sample *sample, | ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from arch/arm64/tests/user-events.c:12: /root//libperf_v7/tools/perf/tests/tests.h:140:5: note: previous declaration of ‘test__arch_unwind_sample’ was here 140 | int test__arch_unwind_sample(struct perf_sample *sample, | ^~~~~~~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors ... The error is gone after the following patch is applied. --- tools/perf/arch/arm64/include/arch-tests.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tools/perf/arch/arm64/include/arch-tests.h b/tools/perf/arch/arm64/include/arch-tests.h index ddfa7460e..7ff2e29bd 100644 --- a/tools/perf/arch/arm64/include/arch-tests.h +++ b/tools/perf/arch/arm64/include/arch-tests.h @@ -4,13 +4,6 @@ #include <linux/compiler.h> -#ifdef HAVE_DWARF_UNWIND_SUPPORT -struct thread; -struct perf_sample; -int test__arch_unwind_sample(struct perf_sample *sample, - struct thread *thread); -#endif - extern struct test arch_tests[]; int test__rd_pinned(struct test __maybe_unused *test, int __maybe_unused subtest); -- Thanks! Masa > > extern struct test arch_tests[]; > +int test__rd_pinned(struct test __maybe_unused *test, > + int __maybe_unused subtest); > + > > #endif > diff --git a/tools/perf/arch/arm64/tests/Build b/tools/perf/arch/arm64/tests/Build > index a61c06bdb757..3f9a20c17fc6 100644 > --- a/tools/perf/arch/arm64/tests/Build > +++ b/tools/perf/arch/arm64/tests/Build > @@ -1,4 +1,5 @@ > perf-y += regs_load.o > perf-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o > > +perf-y += user-events.o > perf-y += arch-tests.o > diff --git a/tools/perf/arch/arm64/tests/arch-tests.c b/tools/perf/arch/arm64/tests/arch-tests.c > index 5b1543c98022..80ce7bd3c16d 100644 > --- a/tools/perf/arch/arm64/tests/arch-tests.c > +++ b/tools/perf/arch/arm64/tests/arch-tests.c > @@ -10,6 +10,10 @@ struct test arch_tests[] = { > .func = test__dwarf_unwind, > }, > #endif > + { > + .desc = "Pinned CPU user counter access", > + .func = test__rd_pinned, > + }, > { > .func = NULL, > }, > diff --git a/tools/perf/arch/arm64/tests/user-events.c b/tools/perf/arch/arm64/tests/user-events.c > new file mode 100644 > index 000000000000..c8efc6b369e6 > --- /dev/null > +++ b/tools/perf/arch/arm64/tests/user-events.c > @@ -0,0 +1,177 @@ > +// SPDX-License-Identifier: GPL-2.0 > +#include <unistd.h> > +#include <sched.h> > +#include <cpumap.h> > + > +#include <perf/core.h> > +#include <perf/threadmap.h> > +#include <perf/evsel.h> > + > +#include "pmu.h" > +#include "debug.h" > +#include "tests/tests.h" > +#include "arch-tests.h" > + > +static int run_test(struct perf_evsel *evsel) > +{ > + int n; > + volatile int tmp = 0; > + u64 delta, i, loops = 1000; > + struct perf_counts_values counts = { .val = 0 }; > + > + for (n = 0; n < 6; n++) { > + u64 stamp, now; > + > + perf_evsel__read(evsel, 0, 0, &counts); > + stamp = counts.val; > + > + for (i = 0; i < loops; i++) > + tmp++; > + > + perf_evsel__read(evsel, 0, 0, &counts); > + now = counts.val; > + loops *= 10; > + > + delta = now - stamp; > + pr_debug("%14d: %14llu\n", n, (long long)delta); > + > + if (!delta) > + break; > + } > + return delta ? 0 : -1; > +} > + > +static struct perf_pmu *pmu_for_cpu(int cpu) > +{ > + int acpu, idx; > + struct perf_pmu *pmu = NULL; > + > + while ((pmu = perf_pmu__scan(pmu)) != NULL) { > + if (pmu->is_uncore) > + continue; > + perf_cpu_map__for_each_cpu(acpu, idx, pmu->cpus) > + if (acpu == cpu) > + return pmu; > + } > + return NULL; > +} > + > +static bool pmu_is_homogeneous(void) > +{ > + int core_cnt = 0; > + struct perf_pmu *pmu = NULL; > + > + while ((pmu = perf_pmu__scan(pmu)) != NULL) { > + if (!pmu->is_uncore && !perf_cpu_map__empty(pmu->cpus)) > + core_cnt++; > + } > + return core_cnt == 1; > +} > + > +static int libperf_print(enum libperf_print_level level, > + const char *fmt, va_list ap) > +{ > + (void)level; > + return vfprintf(stderr, fmt, ap); > +} > + > +static struct perf_evsel *perf_init(struct perf_event_attr *attr) > +{ > + int err; > + struct perf_thread_map *threads; > + struct perf_evsel *evsel; > + struct perf_event_mmap_page *pc; > + > + libperf_init(libperf_print); > + > + threads = perf_thread_map__new_dummy(); > + if (!threads) { > + pr_err("failed to create threads\n"); > + return NULL; > + } > + > + perf_thread_map__set_pid(threads, 0, 0); > + > + evsel = perf_evsel__new(attr); > + if (!evsel) { > + pr_err("failed to create evsel\n"); > + goto out_thread; > + } > + > + err = perf_evsel__open(evsel, NULL, threads); > + if (err) { > + pr_err("failed to open evsel\n"); > + goto out_open; > + } > + > + if (perf_evsel__mmap(evsel, 0)) { > + pr_err("failed to mmap evsel\n"); > + goto out_mmap; > + } > + > + pc = perf_evsel__mmap_base(evsel, 0, 0); > + if (!pc->cap_user_rdpmc) { > + pr_err("userspace access not enabled\n"); > + goto out_mmap; > + } > + > + return evsel; > + > +out_mmap: > + perf_evsel__close(evsel); > +out_open: > + perf_evsel__delete(evsel); > +out_thread: > + perf_thread_map__put(threads); > + return NULL; > +} > + > +int test__rd_pinned(struct test __maybe_unused *test, > + int __maybe_unused subtest) > +{ > + int cpu, cputmp, ret = -1; > + struct perf_evsel *evsel; > + struct perf_event_attr attr = { > + .config = 0x8, /* Instruction count */ > + .config1 = 0, /* 32-bit counter */ > + .exclude_kernel = 1, > + }; > + cpu_set_t cpu_set; > + struct perf_pmu *pmu; > + > + if (pmu_is_homogeneous()) > + return TEST_SKIP; > + > + cpu = sched_getcpu(); > + pmu = pmu_for_cpu(cpu); > + if (!pmu) > + return -1; > + attr.type = pmu->type; > + > + CPU_ZERO(&cpu_set); > + perf_cpu_map__for_each_cpu(cpu, cputmp, pmu->cpus) > + CPU_SET(cpu, &cpu_set); > + if (sched_setaffinity(0, sizeof(cpu_set), &cpu_set) < 0) > + pr_err("Could not set affinity\n"); > + > + evsel = perf_init(&attr); > + if (!evsel) > + return -1; > + > + perf_cpu_map__for_each_cpu(cpu, cputmp, pmu->cpus) { > + CPU_ZERO(&cpu_set); > + CPU_SET(cpu, &cpu_set); > + if (sched_setaffinity(0, sizeof(cpu_set), &cpu_set) < 0) > + pr_err("Could not set affinity\n"); > + > + pr_debug("Running on CPU %d\n", cpu); > + > + ret = run_test(evsel); > + if (ret) > + break; > + } > + > + perf_evsel__close(evsel); > + perf_evsel__delete(evsel); > + return ret; > +} > -- > 2.27.0 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID
From: Masayoshi Mizuma <msys.mizuma@gmail.com> To: Rob Herring <robh@kernel.org> Cc: Will Deacon <will@kernel.org>, Catalin Marinas <catalin.marinas@arm.com>, Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>, Arnaldo Carvalho de Melo <acme@kernel.org>, Jiri Olsa <jolsa@redhat.com>, Mark Rutland <mark.rutland@arm.com>, Alexander Shishkin <alexander.shishkin@linux.intel.com>, honnappa.nagarahalli@arm.com, Zachary.Leaf@arm.com, Raphael Gault <raphael.gault@arm.com>, Jonathan Cameron <Jonathan.Cameron@huawei.com>, Namhyung Kim <namhyung@kernel.org>, Itaru Kitayama <itaru.kitayama@gmail.com>, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v7 7/9] perf: arm64: Add test for userspace counter access on heterogeneous systems Date: Fri, 30 Apr 2021 12:46:16 -0400 [thread overview] Message-ID: <20210430164616.pzb7yxrsugexso25@gabell> (raw) In-Reply-To: <20210420031511.2348977-8-robh@kernel.org> On Mon, Apr 19, 2021 at 10:15:09PM -0500, Rob Herring wrote: > Userspace counter access only works on heterogeneous systems with some > restrictions. The userspace process must be pinned to a homogeneous > subset of CPUs and must open the corresponding PMU for those CPUs. This > commit adds a test implementing these requirements. > > Signed-off-by: Rob Herring <robh@kernel.org> > --- > v6: > - Add a check on cap_user_rdpmc > v5: > - Adapt to libperf mmap API changes > v4: > - Update perf_evsel__mmap params > v2: > - Drop all but heterogeneous test as others covered by libperf tests > - Rework to use libperf > --- > tools/perf/arch/arm64/include/arch-tests.h | 7 + > tools/perf/arch/arm64/tests/Build | 1 + > tools/perf/arch/arm64/tests/arch-tests.c | 4 + > tools/perf/arch/arm64/tests/user-events.c | 177 +++++++++++++++++++++ > 4 files changed, 189 insertions(+) > create mode 100644 tools/perf/arch/arm64/tests/user-events.c > > diff --git a/tools/perf/arch/arm64/include/arch-tests.h b/tools/perf/arch/arm64/include/arch-tests.h > index 90ec4c8cb880..380ad34a3f09 100644 > --- a/tools/perf/arch/arm64/include/arch-tests.h > +++ b/tools/perf/arch/arm64/include/arch-tests.h > @@ -2,11 +2,18 @@ > #ifndef ARCH_TESTS_H > #define ARCH_TESTS_H > > +#include <linux/compiler.h> > + > #ifdef HAVE_DWARF_UNWIND_SUPPORT > struct thread; > struct perf_sample; > +int test__arch_unwind_sample(struct perf_sample *sample, > + struct thread *thread); > #endif Hello, I got the following compile error with aarch64 on Fedora33. # make tools/perf ... In file included from arch/arm64/tests/arch-tests.c:4: /root//libperf_v7/tools/perf/arch/arm64/include/arch-tests.h:10:5: error: redundant redeclaration of ‘test__arch_unwind_sample’ [-Werror=redundant-decls] 10 | int test__arch_unwind_sample(struct perf_sample *sample, | ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from arch/arm64/tests/arch-tests.c:3: /root//libperf_v7/tools/perf/tests/tests.h:140:5: note: previous declaration of ‘test__arch_unwind_sample’ was here 140 | int test__arch_unwind_sample(struct perf_sample *sample, | ^~~~~~~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors make[8]: *** [/root//libperf_v7/tools/build/Makefile.build:97: /root/libperf_v7/tools/perf/arch/arm64/tests/arch-tests.o] Error 1 make[8]: *** Waiting for unfinished jobs.... In file included from arch/arm64/tests/user-events.c:13: /root//libperf_v7/tools/perf/arch/arm64/include/arch-tests.h:10:5: error: redundant redeclaration of ‘test__arch_unwind_sample’ [-Werror=redundant-decls] 10 | int test__arch_unwind_sample(struct perf_sample *sample, | ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from arch/arm64/tests/user-events.c:12: /root//libperf_v7/tools/perf/tests/tests.h:140:5: note: previous declaration of ‘test__arch_unwind_sample’ was here 140 | int test__arch_unwind_sample(struct perf_sample *sample, | ^~~~~~~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors ... The error is gone after the following patch is applied. --- tools/perf/arch/arm64/include/arch-tests.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tools/perf/arch/arm64/include/arch-tests.h b/tools/perf/arch/arm64/include/arch-tests.h index ddfa7460e..7ff2e29bd 100644 --- a/tools/perf/arch/arm64/include/arch-tests.h +++ b/tools/perf/arch/arm64/include/arch-tests.h @@ -4,13 +4,6 @@ #include <linux/compiler.h> -#ifdef HAVE_DWARF_UNWIND_SUPPORT -struct thread; -struct perf_sample; -int test__arch_unwind_sample(struct perf_sample *sample, - struct thread *thread); -#endif - extern struct test arch_tests[]; int test__rd_pinned(struct test __maybe_unused *test, int __maybe_unused subtest); -- Thanks! Masa > > extern struct test arch_tests[]; > +int test__rd_pinned(struct test __maybe_unused *test, > + int __maybe_unused subtest); > + > > #endif > diff --git a/tools/perf/arch/arm64/tests/Build b/tools/perf/arch/arm64/tests/Build > index a61c06bdb757..3f9a20c17fc6 100644 > --- a/tools/perf/arch/arm64/tests/Build > +++ b/tools/perf/arch/arm64/tests/Build > @@ -1,4 +1,5 @@ > perf-y += regs_load.o > perf-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o > > +perf-y += user-events.o > perf-y += arch-tests.o > diff --git a/tools/perf/arch/arm64/tests/arch-tests.c b/tools/perf/arch/arm64/tests/arch-tests.c > index 5b1543c98022..80ce7bd3c16d 100644 > --- a/tools/perf/arch/arm64/tests/arch-tests.c > +++ b/tools/perf/arch/arm64/tests/arch-tests.c > @@ -10,6 +10,10 @@ struct test arch_tests[] = { > .func = test__dwarf_unwind, > }, > #endif > + { > + .desc = "Pinned CPU user counter access", > + .func = test__rd_pinned, > + }, > { > .func = NULL, > }, > diff --git a/tools/perf/arch/arm64/tests/user-events.c b/tools/perf/arch/arm64/tests/user-events.c > new file mode 100644 > index 000000000000..c8efc6b369e6 > --- /dev/null > +++ b/tools/perf/arch/arm64/tests/user-events.c > @@ -0,0 +1,177 @@ > +// SPDX-License-Identifier: GPL-2.0 > +#include <unistd.h> > +#include <sched.h> > +#include <cpumap.h> > + > +#include <perf/core.h> > +#include <perf/threadmap.h> > +#include <perf/evsel.h> > + > +#include "pmu.h" > +#include "debug.h" > +#include "tests/tests.h" > +#include "arch-tests.h" > + > +static int run_test(struct perf_evsel *evsel) > +{ > + int n; > + volatile int tmp = 0; > + u64 delta, i, loops = 1000; > + struct perf_counts_values counts = { .val = 0 }; > + > + for (n = 0; n < 6; n++) { > + u64 stamp, now; > + > + perf_evsel__read(evsel, 0, 0, &counts); > + stamp = counts.val; > + > + for (i = 0; i < loops; i++) > + tmp++; > + > + perf_evsel__read(evsel, 0, 0, &counts); > + now = counts.val; > + loops *= 10; > + > + delta = now - stamp; > + pr_debug("%14d: %14llu\n", n, (long long)delta); > + > + if (!delta) > + break; > + } > + return delta ? 0 : -1; > +} > + > +static struct perf_pmu *pmu_for_cpu(int cpu) > +{ > + int acpu, idx; > + struct perf_pmu *pmu = NULL; > + > + while ((pmu = perf_pmu__scan(pmu)) != NULL) { > + if (pmu->is_uncore) > + continue; > + perf_cpu_map__for_each_cpu(acpu, idx, pmu->cpus) > + if (acpu == cpu) > + return pmu; > + } > + return NULL; > +} > + > +static bool pmu_is_homogeneous(void) > +{ > + int core_cnt = 0; > + struct perf_pmu *pmu = NULL; > + > + while ((pmu = perf_pmu__scan(pmu)) != NULL) { > + if (!pmu->is_uncore && !perf_cpu_map__empty(pmu->cpus)) > + core_cnt++; > + } > + return core_cnt == 1; > +} > + > +static int libperf_print(enum libperf_print_level level, > + const char *fmt, va_list ap) > +{ > + (void)level; > + return vfprintf(stderr, fmt, ap); > +} > + > +static struct perf_evsel *perf_init(struct perf_event_attr *attr) > +{ > + int err; > + struct perf_thread_map *threads; > + struct perf_evsel *evsel; > + struct perf_event_mmap_page *pc; > + > + libperf_init(libperf_print); > + > + threads = perf_thread_map__new_dummy(); > + if (!threads) { > + pr_err("failed to create threads\n"); > + return NULL; > + } > + > + perf_thread_map__set_pid(threads, 0, 0); > + > + evsel = perf_evsel__new(attr); > + if (!evsel) { > + pr_err("failed to create evsel\n"); > + goto out_thread; > + } > + > + err = perf_evsel__open(evsel, NULL, threads); > + if (err) { > + pr_err("failed to open evsel\n"); > + goto out_open; > + } > + > + if (perf_evsel__mmap(evsel, 0)) { > + pr_err("failed to mmap evsel\n"); > + goto out_mmap; > + } > + > + pc = perf_evsel__mmap_base(evsel, 0, 0); > + if (!pc->cap_user_rdpmc) { > + pr_err("userspace access not enabled\n"); > + goto out_mmap; > + } > + > + return evsel; > + > +out_mmap: > + perf_evsel__close(evsel); > +out_open: > + perf_evsel__delete(evsel); > +out_thread: > + perf_thread_map__put(threads); > + return NULL; > +} > + > +int test__rd_pinned(struct test __maybe_unused *test, > + int __maybe_unused subtest) > +{ > + int cpu, cputmp, ret = -1; > + struct perf_evsel *evsel; > + struct perf_event_attr attr = { > + .config = 0x8, /* Instruction count */ > + .config1 = 0, /* 32-bit counter */ > + .exclude_kernel = 1, > + }; > + cpu_set_t cpu_set; > + struct perf_pmu *pmu; > + > + if (pmu_is_homogeneous()) > + return TEST_SKIP; > + > + cpu = sched_getcpu(); > + pmu = pmu_for_cpu(cpu); > + if (!pmu) > + return -1; > + attr.type = pmu->type; > + > + CPU_ZERO(&cpu_set); > + perf_cpu_map__for_each_cpu(cpu, cputmp, pmu->cpus) > + CPU_SET(cpu, &cpu_set); > + if (sched_setaffinity(0, sizeof(cpu_set), &cpu_set) < 0) > + pr_err("Could not set affinity\n"); > + > + evsel = perf_init(&attr); > + if (!evsel) > + return -1; > + > + perf_cpu_map__for_each_cpu(cpu, cputmp, pmu->cpus) { > + CPU_ZERO(&cpu_set); > + CPU_SET(cpu, &cpu_set); > + if (sched_setaffinity(0, sizeof(cpu_set), &cpu_set) < 0) > + pr_err("Could not set affinity\n"); > + > + pr_debug("Running on CPU %d\n", cpu); > + > + ret = run_test(evsel); > + if (ret) > + break; > + } > + > + perf_evsel__close(evsel); > + perf_evsel__delete(evsel); > + return ret; > +} > -- > 2.27.0 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-04-30 16:46 UTC|newest] Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-04-20 3:15 [PATCH v7 0/9] arm64 userspace counter access support Rob Herring 2021-04-20 3:15 ` Rob Herring 2021-04-20 3:15 ` [PATCH v7 1/9] arm64: Restrict undef hook for cpufeature registers Rob Herring 2021-04-20 3:15 ` Rob Herring 2021-04-20 3:15 ` [PATCH v7 2/9] arm64: pmu: Add function implementation to update event index in userpage Rob Herring 2021-04-20 3:15 ` Rob Herring 2021-04-20 3:15 ` [PATCH v7 3/9] arm64: perf: Enable PMU counter direct access for perf event Rob Herring 2021-04-20 3:15 ` Rob Herring 2021-04-20 3:15 ` [PATCH v7 4/9] drivers/perf: arm_pmu: Export the per_cpu cpu_armpmu Rob Herring 2021-04-20 3:15 ` Rob Herring 2021-04-20 3:15 ` [PATCH v7 5/9] arm64: perf: Add userspace counter access disable switch Rob Herring 2021-04-20 3:15 ` Rob Herring 2021-04-20 3:15 ` [PATCH v7 6/9] libperf: Add arm64 support to perf_mmap__read_self() Rob Herring 2021-04-20 3:15 ` Rob Herring 2021-04-20 3:15 ` [PATCH v7 7/9] perf: arm64: Add test for userspace counter access on heterogeneous systems Rob Herring 2021-04-20 3:15 ` Rob Herring 2021-04-30 16:46 ` Masayoshi Mizuma [this message] 2021-04-30 16:46 ` Masayoshi Mizuma 2021-04-30 18:17 ` Rob Herring 2021-04-30 18:17 ` Rob Herring 2021-04-30 18:20 ` Rob Herring 2021-04-30 18:20 ` Rob Herring 2021-04-30 20:16 ` Masayoshi Mizuma 2021-04-30 20:16 ` Masayoshi Mizuma 2021-05-13 9:05 ` nakamura.shun 2021-05-13 9:05 ` nakamura.shun 2021-05-13 12:37 ` Rob Herring 2021-05-13 12:37 ` Rob Herring 2021-04-20 3:15 ` [PATCH v7 8/9] perf: arm64: Add tests for 32-bit and 64-bit counter size userspace access Rob Herring 2021-04-20 3:15 ` Rob Herring 2021-04-20 3:15 ` [PATCH v7 9/9] Documentation: arm64: Document PMU counters access from userspace Rob Herring 2021-04-20 3:15 ` Rob Herring 2021-04-30 18:59 ` [PATCH v7 0/9] arm64 userspace counter access support Arnaldo Carvalho de Melo 2021-04-30 18:59 ` Arnaldo Carvalho de Melo 2021-05-03 14:56 ` Rob Herring 2021-05-03 14:56 ` Rob Herring
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210430164616.pzb7yxrsugexso25@gabell \ --to=msys.mizuma@gmail.com \ --cc=Jonathan.Cameron@huawei.com \ --cc=Zachary.Leaf@arm.com \ --cc=acme@kernel.org \ --cc=alexander.shishkin@linux.intel.com \ --cc=catalin.marinas@arm.com \ --cc=honnappa.nagarahalli@arm.com \ --cc=itaru.kitayama@gmail.com \ --cc=jolsa@redhat.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mark.rutland@arm.com \ --cc=mingo@redhat.com \ --cc=namhyung@kernel.org \ --cc=peterz@infradead.org \ --cc=raphael.gault@arm.com \ --cc=robh@kernel.org \ --cc=will@kernel.org \ --subject='Re: [PATCH v7 7/9] perf: arm64: Add test for userspace counter access on heterogeneous systems' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.