From: Madhavan Srinivasan <ma...@linux.ibm.com>

Extended event_init_opts() to include initialization
of sampling testcases. Patch adds an event_init_sampling()
wrapper to initialize event attribute fields for sampling
events. This includes initializing sample period, sample type
and event type.

Signed-off-by: Madhavan Srinivasan <ma...@linux.ibm.com>
---
 tools/testing/selftests/powerpc/pmu/event.c | 18 +++++++++++++++++-
 tools/testing/selftests/powerpc/pmu/event.h |  1 +
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/powerpc/pmu/event.c 
b/tools/testing/selftests/powerpc/pmu/event.c
index 48e3a413b15d..cbba74c1170f 100644
--- a/tools/testing/selftests/powerpc/pmu/event.c
+++ b/tools/testing/selftests/powerpc/pmu/event.c
@@ -20,7 +20,8 @@ int perf_event_open(struct perf_event_attr *attr, pid_t pid, 
int cpu,
                           group_fd, flags);
 }
 
-void event_init_opts(struct event *e, u64 config, int type, char *name)
+static void  __event_init_opts(struct event *e, u64 config,
+                              int type, char *name, int sampling)
 {
        memset(e, 0, sizeof(*e));
 
@@ -32,6 +33,16 @@ void event_init_opts(struct event *e, u64 config, int type, 
char *name)
        /* This has to match the structure layout in the header */
        e->attr.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED | \
                                  PERF_FORMAT_TOTAL_TIME_RUNNING;
+       if (sampling) {
+               e->attr.sample_period = 1000;
+               e->attr.sample_type = PERF_SAMPLE_REGS_INTR;
+               e->attr.disabled = 1;
+       }
+}
+
+void event_init_opts(struct event *e, u64 config, int type, char *name)
+{
+       __event_init_opts(e, config, type, name, 0);
 }
 
 void event_init_named(struct event *e, u64 config, char *name)
@@ -44,6 +55,11 @@ void event_init(struct event *e, u64 config)
        event_init_opts(e, config, PERF_TYPE_RAW, "event");
 }
 
+void event_init_sampling(struct event *e, u64 config)
+{
+       __event_init_opts(e, config, PERF_TYPE_RAW, "event", 1);
+}
+
 #define PERF_CURRENT_PID       0
 #define PERF_NO_PID            -1
 #define PERF_NO_CPU            -1
diff --git a/tools/testing/selftests/powerpc/pmu/event.h 
b/tools/testing/selftests/powerpc/pmu/event.h
index 23d20340a160..51aad0b6d9ad 100644
--- a/tools/testing/selftests/powerpc/pmu/event.h
+++ b/tools/testing/selftests/powerpc/pmu/event.h
@@ -32,6 +32,7 @@ struct event {
 void event_init(struct event *e, u64 config);
 void event_init_named(struct event *e, u64 config, char *name);
 void event_init_opts(struct event *e, u64 config, int type, char *name);
+void event_init_sampling(struct event *e, u64 config);
 int event_open_with_options(struct event *e, pid_t pid, int cpu, int group_fd);
 int event_open_with_group(struct event *e, int group_fd);
 int event_open_with_pid(struct event *e, pid_t pid);
-- 
2.27.0

Reply via email to