Merge branch 'perf/urgent' into perf/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
@@ -3935,6 +3935,12 @@ int perf_event_read_local(struct perf_event *event, u64 *value,
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* If this is a pinned event it must be running on this CPU */
|
||||
if (event->attr.pinned && event->oncpu != smp_processor_id()) {
|
||||
ret = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the event is currently on this CPU, its either a per-task event,
|
||||
* or local to this CPU. Furthermore it means its ACTIVE (otherwise
|
||||
@@ -8308,6 +8314,8 @@ void perf_tp_event(u16 event_type, u64 count, void *record, int entry_size,
|
||||
goto unlock;
|
||||
|
||||
list_for_each_entry_rcu(event, &ctx->event_list, event_entry) {
|
||||
if (event->cpu != smp_processor_id())
|
||||
continue;
|
||||
if (event->attr.type != PERF_TYPE_TRACEPOINT)
|
||||
continue;
|
||||
if (event->attr.config != entry->type)
|
||||
@@ -9425,9 +9433,7 @@ static void free_pmu_context(struct pmu *pmu)
|
||||
if (pmu->task_ctx_nr > perf_invalid_context)
|
||||
return;
|
||||
|
||||
mutex_lock(&pmus_lock);
|
||||
free_percpu(pmu->pmu_cpu_context);
|
||||
mutex_unlock(&pmus_lock);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -9683,12 +9689,8 @@ EXPORT_SYMBOL_GPL(perf_pmu_register);
|
||||
|
||||
void perf_pmu_unregister(struct pmu *pmu)
|
||||
{
|
||||
int remove_device;
|
||||
|
||||
mutex_lock(&pmus_lock);
|
||||
remove_device = pmu_bus_running;
|
||||
list_del_rcu(&pmu->entry);
|
||||
mutex_unlock(&pmus_lock);
|
||||
|
||||
/*
|
||||
* We dereference the pmu list under both SRCU and regular RCU, so
|
||||
@@ -9700,13 +9702,14 @@ void perf_pmu_unregister(struct pmu *pmu)
|
||||
free_percpu(pmu->pmu_disable_count);
|
||||
if (pmu->type >= PERF_TYPE_MAX)
|
||||
idr_remove(&pmu_idr, pmu->type);
|
||||
if (remove_device) {
|
||||
if (pmu_bus_running) {
|
||||
if (pmu->nr_addr_filters)
|
||||
device_remove_file(pmu->dev, &dev_attr_nr_addr_filters);
|
||||
device_del(pmu->dev);
|
||||
put_device(pmu->dev);
|
||||
}
|
||||
free_pmu_context(pmu);
|
||||
mutex_unlock(&pmus_lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(perf_pmu_unregister);
|
||||
|
||||
|
Reference in New Issue
Block a user