perf kwork: Add `kwork` and `src_type` to work_init() for 'struct kwork_class'
authorYang Jihong <yangjihong1@huawei.com>
Sat, 12 Aug 2023 08:49:05 +0000 (08:49 +0000)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 12 Sep 2023 20:31:59 +0000 (17:31 -0300)
To support different types of reports, two parameters `struct perf_kwork
* kwork` and `enum kwork_trace_type src_type` are added to work_init()
of struct kwork_class for initialization in different scenarios.

No functional change intended.

Reviewed-by: Ian Rogers <irogers@google.com>
Signed-off-by: Yang Jihong <yangjihong1@huawei.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ravi Bangoria <ravi.bangoria@amd.com>
Cc: Sandipan Das <sandipan.das@amd.com>
Link: https://lore.kernel.org/r/20230812084917.169338-5-yangjihong1@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-kwork.c
tools/perf/util/kwork.h

index de2fbb7c56c325327dbd1a9e9ec16fdeea0e3b0b..42ea59a957aed9dad6967fafc381f5c49e8a26df 100644 (file)
@@ -398,7 +398,7 @@ static int work_push_atom(struct perf_kwork *kwork,
        struct kwork_work *work, key;
 
        BUG_ON(class->work_init == NULL);
-       class->work_init(class, &key, evsel, sample, machine);
+       class->work_init(kwork, class, &key, src_type, evsel, sample, machine);
 
        atom = atom_new(kwork, sample);
        if (atom == NULL)
@@ -445,7 +445,7 @@ static struct kwork_atom *work_pop_atom(struct perf_kwork *kwork,
        struct kwork_work *work, key;
 
        BUG_ON(class->work_init == NULL);
-       class->work_init(class, &key, evsel, sample, machine);
+       class->work_init(kwork, class, &key, src_type, evsel, sample, machine);
 
        work = work_findnew(&class->work_root, &key, &kwork->cmp_id);
        if (ret_work != NULL)
@@ -821,8 +821,10 @@ static int irq_class_init(struct kwork_class *class,
        return 0;
 }
 
-static void irq_work_init(struct kwork_class *class,
+static void irq_work_init(struct perf_kwork *kwork __maybe_unused,
+                         struct kwork_class *class,
                          struct kwork_work *work,
+                         enum kwork_trace_type src_type __maybe_unused,
                          struct evsel *evsel,
                          struct perf_sample *sample,
                          struct machine *machine __maybe_unused)
@@ -940,8 +942,10 @@ static char *evsel__softirq_name(struct evsel *evsel, u64 num)
        return name;
 }
 
-static void softirq_work_init(struct kwork_class *class,
+static void softirq_work_init(struct perf_kwork *kwork __maybe_unused,
+                             struct kwork_class *class,
                              struct kwork_work *work,
+                             enum kwork_trace_type src_type __maybe_unused,
                              struct evsel *evsel,
                              struct perf_sample *sample,
                              struct machine *machine __maybe_unused)
@@ -1031,8 +1035,10 @@ static int workqueue_class_init(struct kwork_class *class,
        return 0;
 }
 
-static void workqueue_work_init(struct kwork_class *class,
+static void workqueue_work_init(struct perf_kwork *kwork __maybe_unused,
+                               struct kwork_class *class,
                                struct kwork_work *work,
+                               enum kwork_trace_type src_type __maybe_unused,
                                struct evsel *evsel,
                                struct perf_sample *sample,
                                struct machine *machine)
index 53b7327550b860266600de86058972f2a47a9ed6..736c7a08fb198f0f5874ed283d96cb08bd7abafb 100644 (file)
@@ -91,6 +91,7 @@ struct kwork_atom_page {
        DECLARE_BITMAP(bitmap, NR_ATOM_PER_PAGE);
 };
 
+struct perf_kwork;
 struct kwork_class;
 struct kwork_work {
        /*
@@ -142,8 +143,10 @@ struct kwork_class {
        int (*class_init)(struct kwork_class *class,
                          struct perf_session *session);
 
-       void (*work_init)(struct kwork_class *class,
+       void (*work_init)(struct perf_kwork *kwork,
+                         struct kwork_class *class,
                          struct kwork_work *work,
+                         enum kwork_trace_type src_type,
                          struct evsel *evsel,
                          struct perf_sample *sample,
                          struct machine *machine);
@@ -152,7 +155,6 @@ struct kwork_class {
                          char *buf, int len);
 };
 
-struct perf_kwork;
 struct trace_kwork_handler {
        int (*raise_event)(struct perf_kwork *kwork,
                           struct kwork_class *class, struct evsel *evsel,