diff options
Diffstat (limited to 'arch/arm/kernel/perf_event.c')
| -rw-r--r-- | arch/arm/kernel/perf_event.c | 23 | 
1 files changed, 8 insertions, 15 deletions
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index f9e8657dd24..8c3094d0f7b 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c @@ -149,12 +149,6 @@ again:  static void  armpmu_read(struct perf_event *event)  { -	struct hw_perf_event *hwc = &event->hw; - -	/* Don't read disabled counters! */ -	if (hwc->idx < 0) -		return; -  	armpmu_event_update(event);  } @@ -207,8 +201,6 @@ armpmu_del(struct perf_event *event, int flags)  	struct hw_perf_event *hwc = &event->hw;  	int idx = hwc->idx; -	WARN_ON(idx < 0); -  	armpmu_stop(event, PERF_EF_UPDATE);  	hw_events->events[idx] = NULL;  	clear_bit(idx, hw_events->used_mask); @@ -261,7 +253,10 @@ validate_event(struct pmu_hw_events *hw_events,  	struct arm_pmu *armpmu = to_arm_pmu(event->pmu);  	struct pmu *leader_pmu = event->group_leader->pmu; -	if (event->pmu != leader_pmu || event->state <= PERF_EVENT_STATE_OFF) +	if (event->pmu != leader_pmu || event->state < PERF_EVENT_STATE_OFF) +		return 1; + +	if (event->state == PERF_EVENT_STATE_OFF && !event->attr.enable_on_exec)  		return 1;  	return armpmu->get_event_idx(hw_events, event) >= 0; @@ -358,7 +353,7 @@ __hw_perf_event_init(struct perf_event *event)  {  	struct arm_pmu *armpmu = to_arm_pmu(event->pmu);  	struct hw_perf_event *hwc = &event->hw; -	int mapping, err; +	int mapping;  	mapping = armpmu->map_event(event); @@ -407,14 +402,12 @@ __hw_perf_event_init(struct perf_event *event)  		local64_set(&hwc->period_left, hwc->sample_period);  	} -	err = 0;  	if (event->group_leader != event) { -		err = validate_group(event); -		if (err) +		if (validate_group(event) != 0)  			return -EINVAL;  	} -	return err; +	return 0;  }  static int armpmu_event_init(struct perf_event *event) @@ -494,7 +487,7 @@ const struct dev_pm_ops armpmu_dev_pm_ops = {  	SET_RUNTIME_PM_OPS(armpmu_runtime_suspend, armpmu_runtime_resume, NULL)  }; -static void __init armpmu_init(struct arm_pmu *armpmu) +static void armpmu_init(struct arm_pmu *armpmu)  {  	atomic_set(&armpmu->active_events, 0);  	mutex_init(&armpmu->reserve_mutex);  |