genirq/timings: Encapsulate timings push
authorDaniel Lezcano <daniel.lezcano@linaro.org>
Mon, 27 May 2019 20:55:17 +0000 (22:55 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 12 Jun 2019 08:47:04 +0000 (10:47 +0200)
For the next patches providing the selftest, it is required to artificially
insert timings value in the circular buffer in order to check the
correctness of the code. Encapsulate the common code between the future
test code and the current code with an always-inline tag.

No functional change.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: andriy.shevchenko@linux.intel.com
Link: https://lkml.kernel.org/r/20190527205521.12091-5-daniel.lezcano@linaro.org
kernel/irq/internals.h

index 70c3053bc1f69a5167981511fd34ab79a92c01f3..21f9927ff5ad6c7e52b2e0b993d28cb08034e3e9 100644 (file)
@@ -354,6 +354,16 @@ static inline int irq_timing_decode(u64 value, u64 *timestamp)
        return value & U16_MAX;
 }
 
+static __always_inline void irq_timings_push(u64 ts, int irq)
+{
+       struct irq_timings *timings = this_cpu_ptr(&irq_timings);
+
+       timings->values[timings->count & IRQ_TIMINGS_MASK] =
+               irq_timing_encode(ts, irq);
+
+       timings->count++;
+}
+
 /*
  * The function record_irq_time is only called in one place in the
  * interrupts handler. We want this function always inline so the code
@@ -367,15 +377,8 @@ static __always_inline void record_irq_time(struct irq_desc *desc)
        if (!static_branch_likely(&irq_timing_enabled))
                return;
 
-       if (desc->istate & IRQS_TIMINGS) {
-               struct irq_timings *timings = this_cpu_ptr(&irq_timings);
-
-               timings->values[timings->count & IRQ_TIMINGS_MASK] =
-                       irq_timing_encode(local_clock(),
-                                         irq_desc_get_irq(desc));
-
-               timings->count++;
-       }
+       if (desc->istate & IRQS_TIMINGS)
+               irq_timings_push(local_clock(), irq_desc_get_irq(desc));
 }
 #else
 static inline void irq_remove_timings(struct irq_desc *desc) {}