The powerpc PMU collecting Dispatch Trace Log (DTL) entries makes use of
AUX support in perf infrastructure. To enable the creation of
PERF_RECORD_AUXTRACE, auxtrace_record__init() to initialize auxtrace
record is part of arch/powerpc/util/auxtrace.c

To enable other PMU's to use auxtrace, move the auxtrace_record__init
for powerpc-vpadtl to another file: arch/powerpc/util/vpa-dtl.c
In auxtrace_record__init, based on pmu used, call vpa_dtl_recording_init
to initialize recording options for DTL

Signed-off-by: Athira Rajeev <[email protected]>
---
 tools/perf/arch/powerpc/util/Build      |  1 +
 tools/perf/arch/powerpc/util/auxtrace.c | 79 ++------------------
 tools/perf/arch/powerpc/util/vpa-dtl.c  | 96 +++++++++++++++++++++++++
 tools/perf/util/powerpc-vpadtl.h        |  1 +
 4 files changed, 104 insertions(+), 73 deletions(-)
 create mode 100644 tools/perf/arch/powerpc/util/vpa-dtl.c

diff --git a/tools/perf/arch/powerpc/util/Build 
b/tools/perf/arch/powerpc/util/Build
index ae928050e07a..7819c8f5af2d 100644
--- a/tools/perf/arch/powerpc/util/Build
+++ b/tools/perf/arch/powerpc/util/Build
@@ -7,3 +7,4 @@ perf-util-y += evsel.o
 perf-util-$(CONFIG_LIBDW) += skip-callchain-idx.o
 
 perf-util-y += auxtrace.o
+perf-util-y += vpa-dtl.o
diff --git a/tools/perf/arch/powerpc/util/auxtrace.c 
b/tools/perf/arch/powerpc/util/auxtrace.c
index 4600a1661b4f..0053526329e0 100644
--- a/tools/perf/arch/powerpc/util/auxtrace.c
+++ b/tools/perf/arch/powerpc/util/auxtrace.c
@@ -13,63 +13,12 @@
 #include "../../util/auxtrace.h"
 #include "../../util/powerpc-vpadtl.h"
 #include "../../util/record.h"
-#include <internal/lib.h> // page_size
-
-#define KiB(x) ((x) * 1024)
-
-static int
-powerpc_vpadtl_recording_options(struct auxtrace_record *ar __maybe_unused,
-                       struct evlist *evlist __maybe_unused,
-                       struct record_opts *opts)
-{
-       opts->full_auxtrace = true;
-
-       /*
-        * Set auxtrace_mmap_pages to minimum
-        * two pages
-        */
-       if (!opts->auxtrace_mmap_pages) {
-               opts->auxtrace_mmap_pages = KiB(128) / page_size;
-               if (opts->mmap_pages == UINT_MAX)
-                       opts->mmap_pages = KiB(256) / page_size;
-       }
-
-       return 0;
-}
-
-static size_t powerpc_vpadtl_info_priv_size(struct auxtrace_record *itr 
__maybe_unused,
-                                       struct evlist *evlist __maybe_unused)
-{
-       return VPADTL_AUXTRACE_PRIV_SIZE;
-}
-
-static int
-powerpc_vpadtl_info_fill(struct auxtrace_record *itr __maybe_unused,
-               struct perf_session *session __maybe_unused,
-               struct perf_record_auxtrace_info *auxtrace_info,
-               size_t priv_size __maybe_unused)
-{
-       auxtrace_info->type = PERF_AUXTRACE_VPA_DTL;
-
-       return 0;
-}
-
-static void powerpc_vpadtl_free(struct auxtrace_record *itr)
-{
-       free(itr);
-}
-
-static u64 powerpc_vpadtl_reference(struct auxtrace_record *itr __maybe_unused)
-{
-       return 0;
-}
 
 struct auxtrace_record *auxtrace_record__init(struct evlist *evlist,
                                                int *err)
 {
-       struct auxtrace_record *aux;
        struct evsel *pos;
-       int found = 0;
+       int found_vpa_dtl = 0;
 
        /*
         * Set err value to zero here. Any fail later
@@ -79,32 +28,16 @@ struct auxtrace_record *auxtrace_record__init(struct evlist 
*evlist,
 
        evlist__for_each_entry(evlist, pos) {
                if (strstarts(pos->name, "vpa_dtl")) {
-                       found = 1;
+                       found_vpa_dtl = 1;
                        pos->needs_auxtrace_mmap = true;
                        break;
                }
        }
 
-       if (!found)
-               return NULL;
-
-       /*
-        * To obtain the auxtrace buffer file descriptor, the auxtrace event
-        * must come first.
-        */
-       evlist__to_front(pos->evlist, pos);
-
-       aux = zalloc(sizeof(*aux));
-       if (aux == NULL) {
-               pr_debug("aux record is NULL\n");
-               *err = -ENOMEM;
+       if (found_vpa_dtl)
+               return vpa_dtl_recording_init(pos);
+       else {
+               *err = -EINVAL;
                return NULL;
        }
-
-       aux->recording_options = powerpc_vpadtl_recording_options;
-       aux->info_priv_size = powerpc_vpadtl_info_priv_size;
-       aux->info_fill = powerpc_vpadtl_info_fill;
-       aux->free = powerpc_vpadtl_free;
-       aux->reference = powerpc_vpadtl_reference;
-       return aux;
 }
diff --git a/tools/perf/arch/powerpc/util/vpa-dtl.c 
b/tools/perf/arch/powerpc/util/vpa-dtl.c
new file mode 100644
index 000000000000..ae81cbad0c38
--- /dev/null
+++ b/tools/perf/arch/powerpc/util/vpa-dtl.c
@@ -0,0 +1,96 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * VPA support
+ */
+
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/bitops.h>
+#include <linux/log2.h>
+#include <linux/string.h>
+#include <time.h>
+
+#include "../../util/cpumap.h"
+#include "../../util/evsel.h"
+#include "../../util/evlist.h"
+#include "../../util/session.h"
+#include "../../util/util.h"
+#include "../../util/pmu.h"
+#include "../../util/debug.h"
+#include "../../util/auxtrace.h"
+#include "../../util/powerpc-vpadtl.h"
+#include "../../util/record.h"
+#include <internal/lib.h> // page_size
+
+#define KiB(x) ((x) * 1024)
+
+static int
+powerpc_vpadtl_recording_options(struct auxtrace_record *ar __maybe_unused,
+                       struct evlist *evlist __maybe_unused,
+                       struct record_opts *opts)
+{
+       opts->full_auxtrace = true;
+
+       /*
+        * Set auxtrace_mmap_pages to minimum
+        * two pages
+        */
+       if (!opts->auxtrace_mmap_pages) {
+               opts->auxtrace_mmap_pages = KiB(128) / page_size;
+               if (opts->mmap_pages == UINT_MAX)
+                       opts->mmap_pages = KiB(256) / page_size;
+       }
+
+       return 0;
+}
+
+static size_t powerpc_vpadtl_info_priv_size(struct auxtrace_record *itr 
__maybe_unused,
+                                       struct evlist *evlist __maybe_unused)
+{
+       return VPADTL_AUXTRACE_PRIV_SIZE;
+}
+
+static int
+powerpc_vpadtl_info_fill(struct auxtrace_record *itr __maybe_unused,
+               struct perf_session *session __maybe_unused,
+               struct perf_record_auxtrace_info *auxtrace_info,
+               size_t priv_size __maybe_unused)
+{
+       auxtrace_info->type = PERF_AUXTRACE_VPA_DTL;
+
+       return 0;
+}
+
+static void powerpc_vpadtl_free(struct auxtrace_record *itr)
+{
+       free(itr);
+}
+
+static u64 powerpc_vpadtl_reference(struct auxtrace_record *itr __maybe_unused)
+{
+       return 0;
+}
+
+struct auxtrace_record *vpa_dtl_recording_init(struct evsel *pos)
+{
+       struct auxtrace_record *aux;
+
+       /*
+        * To obtain the auxtrace buffer file descriptor, the auxtrace event
+        * must come first.
+        */
+       evlist__to_front(pos->evlist, pos);
+
+       aux = zalloc(sizeof(*aux));
+       if (aux == NULL) {
+               pr_debug("aux record is NULL\n");
+               return NULL;
+       }
+
+       aux->recording_options = powerpc_vpadtl_recording_options;
+       aux->info_priv_size = powerpc_vpadtl_info_priv_size;
+       aux->info_fill = powerpc_vpadtl_info_fill;
+       aux->free = powerpc_vpadtl_free;
+       aux->reference = powerpc_vpadtl_reference;
+       return aux;
+}
diff --git a/tools/perf/util/powerpc-vpadtl.h b/tools/perf/util/powerpc-vpadtl.h
index ca809660b9bb..5f17e660c562 100644
--- a/tools/perf/util/powerpc-vpadtl.h
+++ b/tools/perf/util/powerpc-vpadtl.h
@@ -20,4 +20,5 @@ struct perf_pmu;
 int powerpc_vpadtl_process_auxtrace_info(union perf_event *event,
                                  struct perf_session *session);
 
+struct auxtrace_record *vpa_dtl_recording_init(struct evsel *pos);
 #endif
-- 
2.52.0


Reply via email to