diff options
| author | Mark Rutland <mark.rutland@arm.com> | 2011-07-19 09:37:10 +0100 | 
|---|---|---|
| committer | Will Deacon <will.deacon@arm.com> | 2011-08-31 10:50:02 +0100 | 
| commit | c47f8684baefa2bf52c4320f894e73db08dc8a0a (patch) | |
| tree | 685df6d09e03620e12d50c31cbf20e69b9e6ee32 /arch/arm/kernel/perf_event_v6.c | |
| parent | 7b9f72c62ed047a200b1ef8c70bee0b58e880af8 (diff) | |
| download | olio-linux-3.10-c47f8684baefa2bf52c4320f894e73db08dc8a0a.tar.xz olio-linux-3.10-c47f8684baefa2bf52c4320f894e73db08dc8a0a.zip  | |
ARM: perf: remove active_mask
Currently, pmu_hw_events::active_mask is used to keep track of which
events are active in hardware. As we can stop counters and their
interrupts, this is unnecessary.
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Reviewed-by: Will Deacon <will.deacon@arm.com>
Reviewed-by: Jamie Iles <jamie@jamieiles.com>
Reviewed-by: Ashwin Chaugule <ashwinc@codeaurora.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/arm/kernel/perf_event_v6.c')
| -rw-r--r-- | arch/arm/kernel/perf_event_v6.c | 19 | 
1 files changed, 18 insertions, 1 deletions
diff --git a/arch/arm/kernel/perf_event_v6.c b/arch/arm/kernel/perf_event_v6.c index 87f29b553b8..83901286226 100644 --- a/arch/arm/kernel/perf_event_v6.c +++ b/arch/arm/kernel/perf_event_v6.c @@ -462,6 +462,23 @@ armv6pmu_enable_event(struct hw_perf_event *hwc,  	raw_spin_unlock_irqrestore(&pmu_lock, flags);  } +static int counter_is_active(unsigned long pmcr, int idx) +{ +	unsigned long mask = 0; +	if (idx == ARMV6_CYCLE_COUNTER) +		mask = ARMV6_PMCR_CCOUNT_IEN; +	else if (idx == ARMV6_COUNTER0) +		mask = ARMV6_PMCR_COUNT0_IEN; +	else if (idx == ARMV6_COUNTER1) +		mask = ARMV6_PMCR_COUNT1_IEN; + +	if (mask) +		return pmcr & mask; + +	WARN_ONCE(1, "invalid counter number (%d)\n", idx); +	return 0; +} +  static irqreturn_t  armv6pmu_handle_irq(int irq_num,  		    void *dev) @@ -491,7 +508,7 @@ armv6pmu_handle_irq(int irq_num,  		struct perf_event *event = cpuc->events[idx];  		struct hw_perf_event *hwc; -		if (!test_bit(idx, cpuc->active_mask)) +		if (!counter_is_active(pmcr, idx))  			continue;  		/*  |