[PATCH 15/15] ARM: perf: handle muxed CPU IRQ lines
Will Deacon
will.deacon at arm.com
Wed Jun 20 09:28:23 EDT 2012
Hi Lee,
On Wed, Jun 20, 2012 at 01:56:51PM +0100, Lee Jones wrote:
> When registering a PMU device, a platform can either use the generic
> IRQ handler, or supplement it with one of its own. One of the reasons
> a platform might choose to do this is to handle the case of muxed IRQ
> lines. If this is the case and the IRQ is handled on the wrong CPU,
> this patch sets affinity with the next successive online CPU.
>
> Cc: Will Deacon <will.deacon at arm.com>
> Signed-off-by: Lee Jones <lee.jones at linaro.org>
> ---
> arch/arm/kernel/perf_event_v7.c | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/kernel/perf_event_v7.c b/arch/arm/kernel/perf_event_v7.c
> index d3c5360..04a8867 100644
> --- a/arch/arm/kernel/perf_event_v7.c
> +++ b/arch/arm/kernel/perf_event_v7.c
> @@ -1069,8 +1069,18 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev)
> /*
> * Did an overflow occur?
> */
> - if (!armv7_pmnc_has_overflowed(pmnc))
> + if (armv7_pmnc_has_overflowed(pmnc)) {
Did you mean to change this predicate?
> + unsigned int next_cpu;
> +
> + next_cpu = cpumask_next(smp_processor_id(), cpu_online_mask);
> +
> + if (next_cpu >= nr_cpumask_bits)
> + next_cpu = cpumask_first(cpu_online_mask);
> +
> + irq_set_affinity(irq_num, cpumask_of(next_cpu));
> +
Shouldn't this be in the platform IRQ handler, rather than the core v7 perf
code?
Will
More information about the linux-arm-kernel
mailing list