diff options
Diffstat (limited to 'arch/arm/kernel/perf_event.c')
| -rw-r--r-- | arch/arm/kernel/perf_event.c | 22 | 
1 files changed, 12 insertions, 10 deletions
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index 8e9c98edc06..5bb91bf3d47 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c @@ -59,8 +59,7 @@ armpmu_get_pmu_id(void)  }  EXPORT_SYMBOL_GPL(armpmu_get_pmu_id); -int -armpmu_get_max_events(void) +int perf_num_counters(void)  {  	int max_events = 0; @@ -69,12 +68,6 @@ armpmu_get_max_events(void)  	return max_events;  } -EXPORT_SYMBOL_GPL(armpmu_get_max_events); - -int perf_num_counters(void) -{ -	return armpmu_get_max_events(); -}  EXPORT_SYMBOL_GPL(perf_num_counters);  #define HW_OP_UNSUPPORTED		0xFFFF @@ -380,6 +373,8 @@ armpmu_release_hardware(struct arm_pmu *armpmu)  {  	int i, irq, irqs;  	struct platform_device *pmu_device = armpmu->plat_device; +	struct arm_pmu_platdata *plat = +		dev_get_platdata(&pmu_device->dev);  	irqs = min(pmu_device->num_resources, num_possible_cpus()); @@ -387,8 +382,11 @@ armpmu_release_hardware(struct arm_pmu *armpmu)  		if (!cpumask_test_and_clear_cpu(i, &armpmu->active_irqs))  			continue;  		irq = platform_get_irq(pmu_device, i); -		if (irq >= 0) +		if (irq >= 0) { +			if (plat && plat->disable_irq) +				plat->disable_irq(irq);  			free_irq(irq, armpmu); +		}  	}  	release_pmu(armpmu->type); @@ -448,7 +446,8 @@ armpmu_reserve_hardware(struct arm_pmu *armpmu)  				irq);  			armpmu_release_hardware(armpmu);  			return err; -		} +		} else if (plat && plat->enable_irq) +			plat->enable_irq(irq);  		cpumask_set_cpu(i, &armpmu->active_irqs);  	} @@ -640,6 +639,9 @@ static struct platform_device_id armpmu_plat_device_ids[] = {  static int __devinit armpmu_device_probe(struct platform_device *pdev)  { +	if (!cpu_pmu) +		return -ENODEV; +  	cpu_pmu->plat_device = pdev;  	return 0;  }  |