Merge branch 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / kernel / irq / internals.h
index 3a948f41ab00565417b840bb9092480876efd1be..3924fbe829d4a8aeaa32750580212b0f008d7f39 100644 (file)
@@ -359,6 +359,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
@@ -372,15 +382,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) {}