misc: tegra-profiler: add overhead information
Igor Nabirushkin [Tue, 6 Jun 2017 12:22:35 +0000 (15:22 +0300)]
Add profiler overhead information: store duration
of the profiler┬ásampling period in the tail of sample.

Bug 1939233

Change-Id: Ifbfb0b98ed8c6ffeec8af96b682761f3fd3d2d61
Signed-off-by: Igor Nabirushkin <inabirushkin@nvidia.com>
Reviewed-on: http://git-master/r/1496893
(cherry picked from commit eb061ee4457f2ff5b271f133c14f553759acab6f)

drivers/misc/tegra-profiler/hrt.c
drivers/misc/tegra-profiler/version.h
include/linux/tegra_profiler.h

index 5da8500..cd1d5ab 100644 (file)
@@ -276,7 +276,6 @@ static int get_sample_data(struct quadd_sample_data *sample,
        else
                sample->ip = instruction_pointer(regs);
 
-       sample->time = quadd_get_time();
        sample->reserved = 0;
        sample->pid = task->pid;
        sample->tgid = task->tgid;
@@ -350,7 +349,8 @@ get_stack_offset(struct task_struct *task,
 static void
 read_all_sources(struct pt_regs *regs, struct task_struct *task, int is_sched)
 {
-       u32 state, extra_data = 0, urcs = 0;
+       u32 state, extra_data = 0, urcs = 0, ts_delta;
+       u64 ts_start, ts_end;
        int i, vec_idx = 0, bt_size = 0;
        int nr_events = 0, nr_positive_events = 0;
        struct pt_regs *user_regs;
@@ -372,6 +372,8 @@ read_all_sources(struct pt_regs *regs, struct task_struct *task, int is_sched)
        if (task->flags & PF_EXITING)
                return;
 
+       s->time = ts_start = quadd_get_time();
+
        if (ctx->pmu && ctx->get_pmu_info()->active)
                nr_events += read_source(ctx->pmu, regs,
                                         events, QUADD_MAX_COUNTERS);
@@ -480,6 +482,13 @@ read_all_sources(struct pt_regs *regs, struct task_struct *task, int is_sched)
                s->state = 0;
        }
 
+       ts_end = quadd_get_time();
+       ts_delta = (u32)(ts_end - ts_start);
+
+       vec[vec_idx].base = &ts_delta;
+       vec[vec_idx].len = sizeof(ts_delta);
+       vec_idx++;
+
        quadd_put_sample_this_cpu(&record_data, vec, vec_idx);
 }
 
index aee99ef..82eb7b2 100644 (file)
@@ -18,7 +18,7 @@
 #ifndef __QUADD_VERSION_H
 #define __QUADD_VERSION_H
 
-#define QUADD_MODULE_VERSION           "1.110"
+#define QUADD_MODULE_VERSION           "1.111"
 #define QUADD_MODULE_BRANCH            "Dev"
 
 #endif /* __QUADD_VERSION_H */
index d71917f..855148c 100644 (file)
@@ -19,7 +19,7 @@
 
 #include <linux/ioctl.h>
 
-#define QUADD_SAMPLES_VERSION  38
+#define QUADD_SAMPLES_VERSION  39
 #define QUADD_IO_VERSION       22
 
 #define QUADD_IO_VERSION_DYNAMIC_RB            5
@@ -61,6 +61,7 @@
 #define QUADD_SAMPLE_VERSION_REPORT_TGID       36
 #define QUADD_SAMPLE_VERSION_MMAP_TS           37
 #define QUADD_SAMPLE_VERSION_RAW_EVENTS                38
+#define QUADD_SAMPLE_VERSION_OVERHEAD_INFO     39
 
 #define QUADD_MMAP_HEADER_VERSION              1