diff options
author | Ingo Molnar <mingo@elte.hu> | 2011-03-04 10:40:22 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2011-03-04 10:40:25 +0100 |
commit | 888a8a3e9d79cbb9d83e53955f684998248580ec (patch) | |
tree | 3dbf548438c77d89c8696a9a79c4129cdc2f3d3e /arch/arm/kernel/pmu.c | |
parent | cfff2d909cbdaf8c467bd321aa0502a548ec8f7e (diff) | |
parent | b06b3d49699a52e8f9ca056c4f96e81b1987d78e (diff) |
Merge branch 'perf/urgent' into perf/core
Merge reason: Pick up updates before queueing up dependent patches.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/arm/kernel/pmu.c')
-rw-r--r-- | arch/arm/kernel/pmu.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/arch/arm/kernel/pmu.c b/arch/arm/kernel/pmu.c index b8af96ea62e6..2c79eec19262 100644 --- a/arch/arm/kernel/pmu.c +++ b/arch/arm/kernel/pmu.c @@ -97,28 +97,34 @@ set_irq_affinity(int irq, irq, cpu); return err; #else - return 0; + return -EINVAL; #endif } static int init_cpu_pmu(void) { - int i, err = 0; + int i, irqs, err = 0; struct platform_device *pdev = pmu_devices[ARM_PMU_DEVICE_CPU]; - if (!pdev) { - err = -ENODEV; - goto out; - } + if (!pdev) + return -ENODEV; + + irqs = pdev->num_resources; + + /* + * If we have a single PMU interrupt that we can't shift, assume that + * we're running on a uniprocessor machine and continue. + */ + if (irqs == 1 && !irq_can_set_affinity(platform_get_irq(pdev, 0))) + return 0; - for (i = 0; i < pdev->num_resources; ++i) { + for (i = 0; i < irqs; ++i) { err = set_irq_affinity(platform_get_irq(pdev, i), i); if (err) break; } -out: return err; } |