Skip to content

Commit

Permalink
genirq/timings: Encapsulate timings push
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Daniel Lezcano authored and Thomas Gleixner committed Jun 12, 2019
1 parent 3c2e79f commit df025e4
Showing 1 changed file with 12 additions and 9 deletions.
21 changes: 12 additions & 9 deletions kernel/irq/internals.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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) {}
Expand Down

0 comments on commit df025e4

Please sign in to comment.