]> Git Repo - J-linux.git/blobdiff - tools/perf/util/scripting-engines/trace-event-python.c
Merge tag 'pinctrl-v6.12-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
[J-linux.git] / tools / perf / util / scripting-engines / trace-event-python.c
index b4f0f60e60a63f34b04464543e36cab71eac3ec5..d7183134b669931fdae286791f4d5927f53148d2 100644 (file)
@@ -45,6 +45,7 @@
 #include "../thread.h"
 #include "../comm.h"
 #include "../machine.h"
+#include "../mem-info.h"
 #include "../db-export.h"
 #include "../thread-stack.h"
 #include "../trace-event.h"
@@ -393,10 +394,10 @@ static const char *get_dsoname(struct map *map)
        struct dso *dso = map ? map__dso(map) : NULL;
 
        if (dso) {
-               if (symbol_conf.show_kernel_path && dso->long_name)
-                       dsoname = dso->long_name;
+               if (symbol_conf.show_kernel_path && dso__long_name(dso))
+                       dsoname = dso__long_name(dso);
                else
-                       dsoname = dso->name;
+                       dsoname = dso__name(dso);
        }
 
        return dsoname;
@@ -720,15 +721,20 @@ static void set_sample_read_in_dict(PyObject *dict_sample,
 }
 
 static void set_sample_datasrc_in_dict(PyObject *dict,
-                                      struct perf_sample *sample)
+                                     struct perf_sample *sample)
 {
-       struct mem_info mi = { .data_src.val = sample->data_src };
+       struct mem_info *mi = mem_info__new();
        char decode[100];
 
+       if (!mi)
+               Py_FatalError("couldn't create mem-info");
+
        pydict_set_item_string_decref(dict, "datasrc",
                        PyLong_FromUnsignedLongLong(sample->data_src));
 
-       perf_script__meminfo_scnprintf(decode, 100, &mi);
+       mem_info__data_src(mi)->val = sample->data_src;
+       perf_script__meminfo_scnprintf(decode, 100, mi);
+       mem_info__put(mi);
 
        pydict_set_item_string_decref(dict, "datasrc_decode",
                        _PyUnicode_FromString(decode));
@@ -756,6 +762,8 @@ static void regs_map(struct regs_dump *regs, uint64_t mask, const char *arch, ch
        }
 }
 
+#define MAX_REG_SIZE 128
+
 static int set_regs_in_dict(PyObject *dict,
                             struct perf_sample *sample,
                             struct evsel *evsel)
@@ -763,14 +771,7 @@ static int set_regs_in_dict(PyObject *dict,
        struct perf_event_attr *attr = &evsel->core.attr;
        const char *arch = perf_env__arch(evsel__env(evsel));
 
-       /*
-        * Here value 28 is a constant size which can be used to print
-        * one register value and its corresponds to:
-        * 16 chars is to specify 64 bit register in hexadecimal.
-        * 2 chars is for appending "0x" to the hexadecimal value and
-        * 10 chars is for register name.
-        */
-       int size = __sw_hweight64(attr->sample_regs_intr) * 28;
+       int size = (__sw_hweight64(attr->sample_regs_intr) * MAX_REG_SIZE) + 1;
        char *bf = malloc(size);
        if (!bf)
                return -1;
@@ -799,8 +800,9 @@ static void set_sym_in_dict(PyObject *dict, struct addr_location *al,
        if (al->map) {
                struct dso *dso = map__dso(al->map);
 
-               pydict_set_item_string_decref(dict, dso_field, _PyUnicode_FromString(dso->name));
-               build_id__sprintf(&dso->bid, sbuild_id);
+               pydict_set_item_string_decref(dict, dso_field,
+                                             _PyUnicode_FromString(dso__name(dso)));
+               build_id__sprintf(dso__bid(dso), sbuild_id);
                pydict_set_item_string_decref(dict, dso_bid_field,
                        _PyUnicode_FromString(sbuild_id));
                pydict_set_item_string_decref(dict, dso_map_start,
@@ -881,6 +883,8 @@ static PyObject *get_perf_sample_dict(struct perf_sample *sample,
        set_sample_read_in_dict(dict_sample, sample, evsel);
        pydict_set_item_string_decref(dict_sample, "weight",
                        PyLong_FromUnsignedLongLong(sample->weight));
+       pydict_set_item_string_decref(dict_sample, "ins_lat",
+                       PyLong_FromUnsignedLong(sample->ins_lat));
        pydict_set_item_string_decref(dict_sample, "transaction",
                        PyLong_FromUnsignedLongLong(sample->transaction));
        set_sample_datasrc_in_dict(dict_sample, sample);
@@ -1246,14 +1250,14 @@ static int python_export_dso(struct db_export *dbe, struct dso *dso,
        char sbuild_id[SBUILD_ID_SIZE];
        PyObject *t;
 
-       build_id__sprintf(&dso->bid, sbuild_id);
+       build_id__sprintf(dso__bid(dso), sbuild_id);
 
        t = tuple_new(5);
 
-       tuple_set_d64(t, 0, dso->db_id);
+       tuple_set_d64(t, 0, dso__db_id(dso));
        tuple_set_d64(t, 1, machine->db_id);
-       tuple_set_string(t, 2, dso->short_name);
-       tuple_set_string(t, 3, dso->long_name);
+       tuple_set_string(t, 2, dso__short_name(dso));
+       tuple_set_string(t, 3, dso__long_name(dso));
        tuple_set_string(t, 4, sbuild_id);
 
        call_object(tables->dso_handler, t, "dso_table");
@@ -1273,7 +1277,7 @@ static int python_export_symbol(struct db_export *dbe, struct symbol *sym,
        t = tuple_new(6);
 
        tuple_set_d64(t, 0, *sym_db_id);
-       tuple_set_d64(t, 1, dso->db_id);
+       tuple_set_d64(t, 1, dso__db_id(dso));
        tuple_set_d64(t, 2, sym->start);
        tuple_set_d64(t, 3, sym->end);
        tuple_set_s32(t, 4, sym->binding);
@@ -1310,7 +1314,7 @@ static void python_export_sample_table(struct db_export *dbe,
        struct tables *tables = container_of(dbe, struct tables, dbe);
        PyObject *t;
 
-       t = tuple_new(27);
+       t = tuple_new(28);
 
        tuple_set_d64(t, 0, es->db_id);
        tuple_set_d64(t, 1, es->evsel->db_id);
@@ -1339,6 +1343,7 @@ static void python_export_sample_table(struct db_export *dbe,
        tuple_set_s32(t, 24, es->sample->flags);
        tuple_set_d64(t, 25, es->sample->id);
        tuple_set_d64(t, 26, es->sample->stream_id);
+       tuple_set_u32(t, 27, es->sample->ins_lat);
 
        call_object(tables->sample_handler, t, "sample_table");
 
@@ -1699,13 +1704,15 @@ static void python_process_stat(struct perf_stat_config *config,
 {
        struct perf_thread_map *threads = counter->core.threads;
        struct perf_cpu_map *cpus = counter->core.cpus;
-       int cpu, thread;
 
-       for (thread = 0; thread < perf_thread_map__nr(threads); thread++) {
-               for (cpu = 0; cpu < perf_cpu_map__nr(cpus); cpu++) {
-                       process_stat(counter, perf_cpu_map__cpu(cpus, cpu),
+       for (int thread = 0; thread < perf_thread_map__nr(threads); thread++) {
+               int idx;
+               struct perf_cpu cpu;
+
+               perf_cpu_map__for_each_cpu(cpu, idx, cpus) {
+                       process_stat(counter, cpu,
                                     perf_thread_map__pid(threads, thread), tstamp,
-                                    perf_counts(counter->counts, cpu, thread));
+                                    perf_counts(counter->counts, idx, thread));
                }
        }
 }
This page took 0.035668 seconds and 4 git commands to generate.