Add cpu_osn_var/cpu_tmr_var() accessors and use them.

Timerlat threads aren't always kthreads, so rename the variable to just
"thread".

rel_period isn't used at all, so remove it.

Signed-off-by: Crystal Wood <[email protected]>
---
v2: new patch
---
 kernel/trace/trace_osnoise.c | 53 +++++++++++++++++++++---------------
 1 file changed, 31 insertions(+), 22 deletions(-)

diff --git a/kernel/trace/trace_osnoise.c b/kernel/trace/trace_osnoise.c
index 0e1265acd1cc..953936bd5eec 100644
--- a/kernel/trace/trace_osnoise.c
+++ b/kernel/trace/trace_osnoise.c
@@ -250,6 +250,11 @@ static inline struct osnoise_variables 
*this_cpu_osn_var(void)
        return this_cpu_ptr(&per_cpu_osnoise_var);
 }
 
+static inline struct osnoise_variables *cpu_osn_var(int cpu)
+{
+       return per_cpu_ptr(&per_cpu_osnoise_var, cpu);
+}
+
 /*
  * Protect the interface.
  */
@@ -260,9 +265,8 @@ static struct mutex interface_lock;
  * Runtime information for the timer mode.
  */
 struct timerlat_variables {
-       struct task_struct      *kthread;
+       struct task_struct      *thread;
        struct hrtimer          timer;
-       u64                     rel_period;
        u64                     abs_period;
        bool                    tracing_thread;
        u64                     count;
@@ -284,6 +288,11 @@ static inline struct timerlat_variables 
*this_cpu_tmr_var(void)
        return this_cpu_ptr(&per_cpu_timerlat_var);
 }
 
+static inline struct timerlat_variables *cpu_tmr_var(int cpu)
+{
+       return per_cpu_ptr(&per_cpu_timerlat_var, cpu);
+}
+
 /*
  * tlat_var_reset - Reset the values of the given timerlat_variables
  */
@@ -300,8 +309,8 @@ static inline void tlat_var_reset(void)
         * zeroing the structure is perfect.
         */
        for_each_online_cpu(cpu) {
-               tlat_var = per_cpu_ptr(&per_cpu_timerlat_var, cpu);
-               if (tlat_var->kthread)
+               tlat_var = cpu_tmr_var(cpu);
+               if (tlat_var->thread)
                        hrtimer_cancel(&tlat_var->timer);
                memset(tlat_var, 0, sizeof(*tlat_var));
        }
@@ -330,7 +339,7 @@ static inline void osn_var_reset(void)
         * zeroing the structure is perfect.
         */
        for_each_online_cpu(cpu) {
-               osn_var = per_cpu_ptr(&per_cpu_osnoise_var, cpu);
+               osn_var = cpu_osn_var(cpu);
                memset(osn_var, 0, sizeof(*osn_var));
        }
 }
@@ -1226,9 +1235,9 @@ static void trace_sched_migrate_callback(void *data, 
struct task_struct *p, int
        struct osnoise_variables *osn_var;
        long cpu = task_cpu(p);
 
-       osn_var = per_cpu_ptr(&per_cpu_osnoise_var, cpu);
+       osn_var = cpu_osn_var(cpu);
        if (osn_var->pid == p->pid && dest_cpu != cpu) {
-               per_cpu_ptr(&per_cpu_timerlat_var, cpu)->uthread_migrate = 1;
+               cpu_tmr_var(cpu)->uthread_migrate = 1;
                osnoise_taint("timerlat user-thread migrated\n");
                osnoise_stop_exception("timerlat user-thread migrated", cpu);
        }
@@ -1826,13 +1835,13 @@ static enum hrtimer_restart timerlat_irq(struct hrtimer 
*timer)
                        osnoise_stop_tracing();
                        notify_new_max_latency(diff);
 
-                       wake_up_process(tlat->kthread);
+                       wake_up_process(tlat->thread);
 
                        return HRTIMER_NORESTART;
                }
        }
 
-       wake_up_process(tlat->kthread);
+       wake_up_process(tlat->thread);
 
        if (osnoise_data.print_stack)
                timerlat_save_stack(0);
@@ -1925,7 +1934,7 @@ static int timerlat_main(void *data)
        tlat->tracing_thread = false;
 
        hrtimer_setup(&tlat->timer, timerlat_irq, CLOCK_MONOTONIC, 
HRTIMER_MODE_ABS_PINNED_HARD);
-       tlat->kthread = current;
+       tlat->thread = current;
        osn_var->pid = current->pid;
        /*
         * Annotate the arrival time.
@@ -1980,7 +1989,7 @@ static void stop_kthread(unsigned int cpu)
 {
        struct task_struct *kthread;
 
-       kthread = xchg_relaxed(&(per_cpu(per_cpu_osnoise_var, cpu).kthread), 
NULL);
+       kthread = xchg_relaxed(&cpu_osn_var(cpu)->kthread, NULL);
        if (kthread) {
                if (cpumask_test_and_clear_cpu(cpu, &kthread_cpumask) &&
                    !WARN_ON(!test_bit(OSN_WORKLOAD, &osnoise_options))) {
@@ -2000,7 +2009,7 @@ static void stop_kthread(unsigned int cpu)
                        /*
                         * This is set in the osnoise tracer case.
                         */
-                       per_cpu(per_cpu_osnoise_var, cpu).sampling = false;
+                       cpu_osn_var(cpu)->sampling = false;
                        barrier();
                }
        }
@@ -2034,7 +2043,7 @@ static int start_kthread(unsigned int cpu)
        char comm[24];
 
        /* Do not start a new thread if it is already running */
-       if (per_cpu(per_cpu_osnoise_var, cpu).kthread)
+       if (cpu_osn_var(cpu)->kthread)
                return 0;
 
        if (timerlat_enabled()) {
@@ -2043,7 +2052,7 @@ static int start_kthread(unsigned int cpu)
        } else {
                /* if no workload, just return */
                if (!test_bit(OSN_WORKLOAD, &osnoise_options)) {
-                       per_cpu(per_cpu_osnoise_var, cpu).sampling = true;
+                       cpu_osn_var(cpu)->sampling = true;
                        barrier();
                        return 0;
                }
@@ -2057,7 +2066,7 @@ static int start_kthread(unsigned int cpu)
                return -ENOMEM;
        }
 
-       per_cpu(per_cpu_osnoise_var, cpu).kthread = kthread;
+       cpu_osn_var(cpu)->kthread = kthread;
        cpumask_set_cpu(cpu, &kthread_cpumask);
 
        return 0;
@@ -2090,7 +2099,7 @@ static int start_per_cpu_kthreads(void)
                if (cpumask_test_and_clear_cpu(cpu, &kthread_cpumask)) {
                        struct task_struct *kthread;
 
-                       kthread = xchg_relaxed(&(per_cpu(per_cpu_osnoise_var, 
cpu).kthread), NULL);
+                       kthread = xchg_relaxed(&cpu_osn_var(cpu)->kthread, 
NULL);
                        if (!WARN_ON(!kthread))
                                kthread_stop(kthread);
                }
@@ -2519,7 +2528,7 @@ timerlat_fd_read(struct file *file, char __user *ubuf, 
size_t count,
                        return -EINVAL;
                }
        } else {
-               per_cpu_ptr(&per_cpu_timerlat_var, cpu)->uthread_migrate = 1;
+               cpu_tmr_var(cpu)->uthread_migrate = 1;
                osnoise_taint("timerlat user thread migrate\n");
                osnoise_stop_tracing();
                migrate_enable();
@@ -2563,7 +2572,7 @@ timerlat_fd_read(struct file *file, char __user *ubuf, 
size_t count,
                }
        } else {
                tlat->tracing_thread = false;
-               tlat->kthread = current;
+               tlat->thread = current;
 
                /* Annotate now to drift new period */
                tlat->abs_period = hrtimer_cb_get_time(&tlat->timer);
@@ -2612,10 +2621,10 @@ static int timerlat_fd_release(struct inode *inode, 
struct file *file)
        migrate_disable();
        mutex_lock(&interface_lock);
 
-       osn_var = per_cpu_ptr(&per_cpu_osnoise_var, cpu);
-       tlat_var = per_cpu_ptr(&per_cpu_timerlat_var, cpu);
+       osn_var = cpu_osn_var(cpu);
+       tlat_var = cpu_tmr_var(cpu);
 
-       if (tlat_var->kthread)
+       if (tlat_var->thread)
                hrtimer_cancel(&tlat_var->timer);
        memset(tlat_var, 0, sizeof(*tlat_var));
 
@@ -3095,7 +3104,7 @@ static void timerlat_tracer_stop(struct trace_array *tr)
         */
        if (!osnoise_has_registered_instances()) {
                for_each_online_cpu(cpu)
-                       per_cpu(per_cpu_osnoise_var, cpu).sampling = 0;
+                       cpu_osn_var(cpu)->sampling = 0;
        }
 
        osnoise_workload_stop();
-- 
2.54.0


Reply via email to