perf kvm: Move kvm-stat header file from conditional inclusion to common include...
[linux-2.6-block.git] / tools / perf / builtin-sched.c
index 56d1907b12159cc7548dda7e3bcfde7d01b904a9..f0b828c201ccdefc07904cb9977516a1090e96aa 100644 (file)
@@ -1,9 +1,10 @@
 // SPDX-License-Identifier: GPL-2.0
 #include "builtin.h"
 #include "perf.h"
+#include "perf-sys.h"
 
+#include "util/cpumap.h"
 #include "util/evlist.h"
-#include "util/cache.h"
 #include "util/evsel.h"
 #include "util/symbol.h"
 #include "util/thread.h"
 #include "util/callchain.h"
 #include "util/time-utils.h"
 
+#include <subcmd/pager.h>
 #include <subcmd/parse-options.h>
 #include "util/trace-event.h"
 
 #include "util/debug.h"
+#include "util/event.h"
 
 #include <linux/kernel.h>
 #include <linux/log2.h>
@@ -35,6 +38,7 @@
 #include <pthread.h>
 #include <math.h>
 #include <api/fs/fs.h>
+#include <perf/cpumap.h>
 #include <linux/time64.h>
 
 #include <linux/ctype.h>
@@ -133,13 +137,13 @@ typedef int (*sort_fn_t)(struct work_atoms *, struct work_atoms *);
 struct perf_sched;
 
 struct trace_sched_handler {
-       int (*switch_event)(struct perf_sched *sched, struct perf_evsel *evsel,
+       int (*switch_event)(struct perf_sched *sched, struct evsel *evsel,
                            struct perf_sample *sample, struct machine *machine);
 
-       int (*runtime_event)(struct perf_sched *sched, struct perf_evsel *evsel,
+       int (*runtime_event)(struct perf_sched *sched, struct evsel *evsel,
                             struct perf_sample *sample, struct machine *machine);
 
-       int (*wakeup_event)(struct perf_sched *sched, struct perf_evsel *evsel,
+       int (*wakeup_event)(struct perf_sched *sched, struct evsel *evsel,
                            struct perf_sample *sample, struct machine *machine);
 
        /* PERF_RECORD_FORK event, not sched_process_fork tracepoint */
@@ -147,7 +151,7 @@ struct trace_sched_handler {
                          struct machine *machine);
 
        int (*migrate_task_event)(struct perf_sched *sched,
-                                 struct perf_evsel *evsel,
+                                 struct evsel *evsel,
                                  struct perf_sample *sample,
                                  struct machine *machine);
 };
@@ -159,11 +163,11 @@ struct perf_sched_map {
        DECLARE_BITMAP(comp_cpus_mask, MAX_CPUS);
        int                     *comp_cpus;
        bool                     comp;
-       struct thread_map       *color_pids;
+       struct perf_thread_map *color_pids;
        const char              *color_pids_str;
-       struct cpu_map          *color_cpus;
+       struct perf_cpu_map     *color_cpus;
        const char              *color_cpus_str;
-       struct cpu_map          *cpus;
+       struct perf_cpu_map     *cpus;
        const char              *cpus_str;
 };
 
@@ -799,7 +803,7 @@ static void test_calibrations(struct perf_sched *sched)
 
 static int
 replay_wakeup_event(struct perf_sched *sched,
-                   struct perf_evsel *evsel, struct perf_sample *sample,
+                   struct evsel *evsel, struct perf_sample *sample,
                    struct machine *machine __maybe_unused)
 {
        const char *comm = perf_evsel__strval(evsel, sample, "comm");
@@ -820,7 +824,7 @@ replay_wakeup_event(struct perf_sched *sched,
 }
 
 static int replay_switch_event(struct perf_sched *sched,
-                              struct perf_evsel *evsel,
+                              struct evsel *evsel,
                               struct perf_sample *sample,
                               struct machine *machine __maybe_unused)
 {
@@ -1093,7 +1097,7 @@ add_sched_in_event(struct work_atoms *atoms, u64 timestamp)
 }
 
 static int latency_switch_event(struct perf_sched *sched,
-                               struct perf_evsel *evsel,
+                               struct evsel *evsel,
                                struct perf_sample *sample,
                                struct machine *machine)
 {
@@ -1163,7 +1167,7 @@ out_put:
 }
 
 static int latency_runtime_event(struct perf_sched *sched,
-                                struct perf_evsel *evsel,
+                                struct evsel *evsel,
                                 struct perf_sample *sample,
                                 struct machine *machine)
 {
@@ -1198,7 +1202,7 @@ out_put:
 }
 
 static int latency_wakeup_event(struct perf_sched *sched,
-                               struct perf_evsel *evsel,
+                               struct evsel *evsel,
                                struct perf_sample *sample,
                                struct machine *machine)
 {
@@ -1259,7 +1263,7 @@ out_put:
 }
 
 static int latency_migrate_task_event(struct perf_sched *sched,
-                                     struct perf_evsel *evsel,
+                                     struct evsel *evsel,
                                      struct perf_sample *sample,
                                      struct machine *machine)
 {
@@ -1470,7 +1474,7 @@ again:
 }
 
 static int process_sched_wakeup_event(struct perf_tool *tool,
-                                     struct perf_evsel *evsel,
+                                     struct evsel *evsel,
                                      struct perf_sample *sample,
                                      struct machine *machine)
 {
@@ -1514,7 +1518,7 @@ map__findnew_thread(struct perf_sched *sched, struct machine *machine, pid_t pid
        return thread;
 }
 
-static int map_switch_event(struct perf_sched *sched, struct perf_evsel *evsel,
+static int map_switch_event(struct perf_sched *sched, struct evsel *evsel,
                            struct perf_sample *sample, struct machine *machine)
 {
        const u32 next_pid = perf_evsel__intval(evsel, sample, "next_pid");
@@ -1655,7 +1659,7 @@ out:
 }
 
 static int process_sched_switch_event(struct perf_tool *tool,
-                                     struct perf_evsel *evsel,
+                                     struct evsel *evsel,
                                      struct perf_sample *sample,
                                      struct machine *machine)
 {
@@ -1681,7 +1685,7 @@ static int process_sched_switch_event(struct perf_tool *tool,
 }
 
 static int process_sched_runtime_event(struct perf_tool *tool,
-                                      struct perf_evsel *evsel,
+                                      struct evsel *evsel,
                                       struct perf_sample *sample,
                                       struct machine *machine)
 {
@@ -1711,7 +1715,7 @@ static int perf_sched__process_fork_event(struct perf_tool *tool,
 }
 
 static int process_sched_migrate_task_event(struct perf_tool *tool,
-                                           struct perf_evsel *evsel,
+                                           struct evsel *evsel,
                                            struct perf_sample *sample,
                                            struct machine *machine)
 {
@@ -1724,14 +1728,14 @@ static int process_sched_migrate_task_event(struct perf_tool *tool,
 }
 
 typedef int (*tracepoint_handler)(struct perf_tool *tool,
-                                 struct perf_evsel *evsel,
+                                 struct evsel *evsel,
                                  struct perf_sample *sample,
                                  struct machine *machine);
 
 static int perf_sched__process_tracepoint_sample(struct perf_tool *tool __maybe_unused,
                                                 union perf_event *event __maybe_unused,
                                                 struct perf_sample *sample,
-                                                struct perf_evsel *evsel,
+                                                struct evsel *evsel,
                                                 struct machine *machine)
 {
        int err = 0;
@@ -1777,7 +1781,7 @@ static int perf_sched__process_comm(struct perf_tool *tool __maybe_unused,
 
 static int perf_sched__read_events(struct perf_sched *sched)
 {
-       const struct perf_evsel_str_handler handlers[] = {
+       const struct evsel_str_handler handlers[] = {
                { "sched:sched_switch",       process_sched_switch_event, },
                { "sched:sched_stat_runtime", process_sched_runtime_event, },
                { "sched:sched_wakeup",       process_sched_wakeup_event, },
@@ -1839,7 +1843,7 @@ static inline void print_sched_time(unsigned long long nsecs, int width)
  * returns runtime data for event, allocating memory for it the
  * first time it is used.
  */
-static struct evsel_runtime *perf_evsel__get_runtime(struct perf_evsel *evsel)
+static struct evsel_runtime *perf_evsel__get_runtime(struct evsel *evsel)
 {
        struct evsel_runtime *r = evsel->priv;
 
@@ -1854,7 +1858,7 @@ static struct evsel_runtime *perf_evsel__get_runtime(struct perf_evsel *evsel)
 /*
  * save last time event was seen per cpu
  */
-static void perf_evsel__save_time(struct perf_evsel *evsel,
+static void perf_evsel__save_time(struct evsel *evsel,
                                  u64 timestamp, u32 cpu)
 {
        struct evsel_runtime *r = perf_evsel__get_runtime(evsel);
@@ -1881,7 +1885,7 @@ static void perf_evsel__save_time(struct perf_evsel *evsel,
 }
 
 /* returns last time this event was seen on the given cpu */
-static u64 perf_evsel__get_time(struct perf_evsel *evsel, u32 cpu)
+static u64 perf_evsel__get_time(struct evsel *evsel, u32 cpu)
 {
        struct evsel_runtime *r = perf_evsel__get_runtime(evsel);
 
@@ -1988,7 +1992,7 @@ static char task_state_char(struct thread *thread, int state)
 }
 
 static void timehist_print_sample(struct perf_sched *sched,
-                                 struct perf_evsel *evsel,
+                                 struct evsel *evsel,
                                  struct perf_sample *sample,
                                  struct addr_location *al,
                                  struct thread *thread,
@@ -2121,7 +2125,7 @@ static void timehist_update_runtime_stats(struct thread_runtime *r,
 }
 
 static bool is_idle_sample(struct perf_sample *sample,
-                          struct perf_evsel *evsel)
+                          struct evsel *evsel)
 {
        /* pid 0 == swapper == idle task */
        if (strcmp(perf_evsel__name(evsel), "sched:sched_switch") == 0)
@@ -2132,7 +2136,7 @@ static bool is_idle_sample(struct perf_sample *sample,
 
 static void save_task_callchain(struct perf_sched *sched,
                                struct perf_sample *sample,
-                               struct perf_evsel *evsel,
+                               struct evsel *evsel,
                                struct machine *machine)
 {
        struct callchain_cursor *cursor = &callchain_cursor;
@@ -2286,7 +2290,7 @@ static void save_idle_callchain(struct perf_sched *sched,
 static struct thread *timehist_get_thread(struct perf_sched *sched,
                                          struct perf_sample *sample,
                                          struct machine *machine,
-                                         struct perf_evsel *evsel)
+                                         struct evsel *evsel)
 {
        struct thread *thread;
 
@@ -2332,7 +2336,7 @@ static struct thread *timehist_get_thread(struct perf_sched *sched,
 
 static bool timehist_skip_sample(struct perf_sched *sched,
                                 struct thread *thread,
-                                struct perf_evsel *evsel,
+                                struct evsel *evsel,
                                 struct perf_sample *sample)
 {
        bool rc = false;
@@ -2354,7 +2358,7 @@ static bool timehist_skip_sample(struct perf_sched *sched,
 }
 
 static void timehist_print_wakeup_event(struct perf_sched *sched,
-                                       struct perf_evsel *evsel,
+                                       struct evsel *evsel,
                                        struct perf_sample *sample,
                                        struct machine *machine,
                                        struct thread *awakened)
@@ -2389,7 +2393,7 @@ static void timehist_print_wakeup_event(struct perf_sched *sched,
 
 static int timehist_sched_wakeup_event(struct perf_tool *tool,
                                       union perf_event *event __maybe_unused,
-                                      struct perf_evsel *evsel,
+                                      struct evsel *evsel,
                                       struct perf_sample *sample,
                                       struct machine *machine)
 {
@@ -2419,7 +2423,7 @@ static int timehist_sched_wakeup_event(struct perf_tool *tool,
 }
 
 static void timehist_print_migration_event(struct perf_sched *sched,
-                                       struct perf_evsel *evsel,
+                                       struct evsel *evsel,
                                        struct perf_sample *sample,
                                        struct machine *machine,
                                        struct thread *migrated)
@@ -2473,7 +2477,7 @@ static void timehist_print_migration_event(struct perf_sched *sched,
 
 static int timehist_migrate_task_event(struct perf_tool *tool,
                                       union perf_event *event __maybe_unused,
-                                      struct perf_evsel *evsel,
+                                      struct evsel *evsel,
                                       struct perf_sample *sample,
                                       struct machine *machine)
 {
@@ -2501,7 +2505,7 @@ static int timehist_migrate_task_event(struct perf_tool *tool,
 
 static int timehist_sched_change_event(struct perf_tool *tool,
                                       union perf_event *event,
-                                      struct perf_evsel *evsel,
+                                      struct evsel *evsel,
                                       struct perf_sample *sample,
                                       struct machine *machine)
 {
@@ -2627,7 +2631,7 @@ out:
 
 static int timehist_sched_switch_event(struct perf_tool *tool,
                             union perf_event *event,
-                            struct perf_evsel *evsel,
+                            struct evsel *evsel,
                             struct perf_sample *sample,
                             struct machine *machine __maybe_unused)
 {
@@ -2643,7 +2647,7 @@ static int process_lost(struct perf_tool *tool __maybe_unused,
 
        timestamp__scnprintf_usec(sample->time, tstr, sizeof(tstr));
        printf("%15s ", tstr);
-       printf("lost %" PRIu64 " events on cpu %d\n", event->lost.lost, sample->cpu);
+       printf("lost %" PRI_lu64 " events on cpu %d\n", event->lost.lost, sample->cpu);
 
        return 0;
 }
@@ -2897,14 +2901,14 @@ static void timehist_print_summary(struct perf_sched *sched,
 
 typedef int (*sched_handler)(struct perf_tool *tool,
                          union perf_event *event,
-                         struct perf_evsel *evsel,
+                         struct evsel *evsel,
                          struct perf_sample *sample,
                          struct machine *machine);
 
 static int perf_timehist__process_sample(struct perf_tool *tool,
                                         union perf_event *event,
                                         struct perf_sample *sample,
-                                        struct perf_evsel *evsel,
+                                        struct evsel *evsel,
                                         struct machine *machine)
 {
        struct perf_sched *sched = container_of(tool, struct perf_sched, tool);
@@ -2924,12 +2928,12 @@ static int perf_timehist__process_sample(struct perf_tool *tool,
 }
 
 static int timehist_check_attr(struct perf_sched *sched,
-                              struct perf_evlist *evlist)
+                              struct evlist *evlist)
 {
-       struct perf_evsel *evsel;
+       struct evsel *evsel;
        struct evsel_runtime *er;
 
-       list_for_each_entry(evsel, &evlist->entries, node) {
+       list_for_each_entry(evsel, &evlist->core.entries, core.node) {
                er = perf_evsel__get_runtime(evsel);
                if (er == NULL) {
                        pr_err("Failed to allocate memory for evsel runtime data\n");
@@ -2948,12 +2952,12 @@ static int timehist_check_attr(struct perf_sched *sched,
 
 static int perf_sched__timehist(struct perf_sched *sched)
 {
-       const struct perf_evsel_str_handler handlers[] = {
+       const struct evsel_str_handler handlers[] = {
                { "sched:sched_switch",       timehist_sched_switch_event, },
                { "sched:sched_wakeup",       timehist_sched_wakeup_event, },
                { "sched:sched_wakeup_new",   timehist_sched_wakeup_event, },
        };
-       const struct perf_evsel_str_handler migrate_handlers[] = {
+       const struct evsel_str_handler migrate_handlers[] = {
                { "sched:sched_migrate_task", timehist_migrate_task_event, },
        };
        struct perf_data data = {
@@ -2963,7 +2967,7 @@ static int perf_sched__timehist(struct perf_sched *sched)
        };
 
        struct perf_session *session;
-       struct perf_evlist *evlist;
+       struct evlist *evlist;
        int err = -1;
 
        /*
@@ -3170,7 +3174,7 @@ static int perf_sched__lat(struct perf_sched *sched)
 
 static int setup_map_cpus(struct perf_sched *sched)
 {
-       struct cpu_map *map;
+       struct perf_cpu_map *map;
 
        sched->max_cpu  = sysconf(_SC_NPROCESSORS_CONF);
 
@@ -3183,7 +3187,7 @@ static int setup_map_cpus(struct perf_sched *sched)
        if (!sched->map.cpus_str)
                return 0;
 
-       map = cpu_map__new(sched->map.cpus_str);
+       map = perf_cpu_map__new(sched->map.cpus_str);
        if (!map) {
                pr_err("failed to get cpus map from %s\n", sched->map.cpus_str);
                return -1;
@@ -3195,7 +3199,7 @@ static int setup_map_cpus(struct perf_sched *sched)
 
 static int setup_color_pids(struct perf_sched *sched)
 {
-       struct thread_map *map;
+       struct perf_thread_map *map;
 
        if (!sched->map.color_pids_str)
                return 0;
@@ -3212,12 +3216,12 @@ static int setup_color_pids(struct perf_sched *sched)
 
 static int setup_color_cpus(struct perf_sched *sched)
 {
-       struct cpu_map *map;
+       struct perf_cpu_map *map;
 
        if (!sched->map.color_cpus_str)
                return 0;
 
-       map = cpu_map__new(sched->map.color_cpus_str);
+       map = perf_cpu_map__new(sched->map.color_cpus_str);
        if (!map) {
                pr_err("failed to get thread map from %s\n", sched->map.color_cpus_str);
                return -1;