Re: [PATCH V5] irq: Track the interrupt timings

From: Nicolas Pitre
Date: Tue Jun 14 2016 - 13:46:42 EST


On Tue, 14 Jun 2016, Daniel Lezcano wrote:

[...]

> +void __handle_timings(struct irq_desc *desc)
> +{
> + struct irq_timings *timings;
> + u64 prev, now, diff;
> +
> + timings = this_cpu_ptr(desc->timings);
> + now = local_clock();
> + prev = timings->timestamp;
> + timings->timestamp = now;
> +
> + /*
> + * In case it is the first time this function is called, the
> + * 'prev' variable will be zero which reflects the time origin
> + * when the system booted.
> + */
> + diff = now - prev;
> +
> + /* The oldest value corresponds to the next index. */
> + timings->w_index = (timings->w_index + 1) & IRQ_TIMINGS_MASK;
> + timings->values[timings->w_index] = diff;
> +}

What about simply this:

void __handle_timings(struct irq_desc *desc)
{
struct irq_timings *timings = this_cpu_ptr(desc->timings);
timings->w_index = (timings->w_index + 1) & IRQ_TIMINGS_MASK;
timings->values[timings->w_index] = local_clock();
}

?

Then you could s/__handle_timings/__record_irq_time/ to better represent
what it does. And both the difference and the summing of squares could
be done upon entering idle instead.


Nicolas