perf timechart: Add p_state_end helper
authorShang XiaoJing <shangxiaojing@huawei.com>
Thu, 8 Sep 2022 02:11:41 +0000 (10:11 +0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 4 Oct 2022 11:55:21 +0000 (08:55 -0300)
Wrap repeated code in helper functions p_state_end, which alloc a new
power_event recording last pstate, and insert to the head of
tchart->power_events.

Signed-off-by: Shang XiaoJing <shangxiaojing@huawei.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20220908021141.27134-5-shangxiaojing@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-timechart.c

index 667a94d45493f7eaf03b0b1982658aa9ad215821..c36296bb7637ef6272fc0a0c583bb2ddcf7639d0 100644 (file)
@@ -376,16 +376,13 @@ static void c_state_end(struct timechart *tchart, int cpu, u64 timestamp)
        tchart->power_events = pwr;
 }
 
-static void p_state_change(struct timechart *tchart, int cpu, u64 timestamp, u64 new_freq)
+static struct power_event *p_state_end(struct timechart *tchart, int cpu,
+                                       u64 timestamp)
 {
-       struct power_event *pwr;
-
-       if (new_freq > 8000000) /* detect invalid data */
-               return;
+       struct power_event *pwr = zalloc(sizeof(*pwr));
 
-       pwr = zalloc(sizeof(*pwr));
        if (!pwr)
-               return;
+               return NULL;
 
        pwr->state = cpus_pstate_state[cpu];
        pwr->start_time = cpus_pstate_start_times[cpu];
@@ -393,11 +390,23 @@ static void p_state_change(struct timechart *tchart, int cpu, u64 timestamp, u64
        pwr->cpu = cpu;
        pwr->type = PSTATE;
        pwr->next = tchart->power_events;
-
        if (!pwr->start_time)
                pwr->start_time = tchart->first_time;
 
        tchart->power_events = pwr;
+       return pwr;
+}
+
+static void p_state_change(struct timechart *tchart, int cpu, u64 timestamp, u64 new_freq)
+{
+       struct power_event *pwr;
+
+       if (new_freq > 8000000) /* detect invalid data */
+               return;
+
+       pwr = p_state_end(tchart, cpu, timestamp);
+       if (!pwr)
+               return;
 
        cpus_pstate_state[cpu] = new_freq;
        cpus_pstate_start_times[cpu] = timestamp;
@@ -705,22 +714,12 @@ static void end_sample_processing(struct timechart *tchart)
 #endif
                /* P state */
 
-               pwr = zalloc(sizeof(*pwr));
+               pwr = p_state_end(tchart, cpu, tchart->last_time);
                if (!pwr)
                        return;
 
-               pwr->state = cpus_pstate_state[cpu];
-               pwr->start_time = cpus_pstate_start_times[cpu];
-               pwr->end_time = tchart->last_time;
-               pwr->cpu = cpu;
-               pwr->type = PSTATE;
-               pwr->next = tchart->power_events;
-
-               if (!pwr->start_time)
-                       pwr->start_time = tchart->first_time;
                if (!pwr->state)
                        pwr->state = tchart->min_freq;
-               tchart->power_events = pwr;
        }
 }