Merge "Revert "perf: stop deadlock if attempt to bring cpu up fails""
This commit is contained in:
commit
73c7c075c8
3 changed files with 41 additions and 1 deletions
|
@ -552,6 +552,7 @@ static void armpmu_init(struct arm_pmu *armpmu)
|
||||||
.stop = armpmu_stop,
|
.stop = armpmu_stop,
|
||||||
.read = armpmu_read,
|
.read = armpmu_read,
|
||||||
.filter_match = armpmu_filter_match,
|
.filter_match = armpmu_filter_match,
|
||||||
|
.events_across_hotplug = 1,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1693,7 +1693,33 @@ static int __perf_remove_from_context(void *info)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
static void perf_retry_remove(struct perf_event *event,
|
||||||
|
struct remove_event *rep)
|
||||||
|
{
|
||||||
|
int up_ret;
|
||||||
|
/*
|
||||||
|
* CPU was offline. Bring it online so we can
|
||||||
|
* gracefully exit a perf context.
|
||||||
|
*/
|
||||||
|
up_ret = cpu_up(event->cpu);
|
||||||
|
if (!up_ret)
|
||||||
|
/* Try the remove call once again. */
|
||||||
|
cpu_function_call(event->cpu, __perf_remove_from_context,
|
||||||
|
rep);
|
||||||
|
else
|
||||||
|
pr_err("Failed to bring up CPU: %d, ret: %d\n",
|
||||||
|
event->cpu, up_ret);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static void perf_retry_remove(struct perf_event *event,
|
||||||
|
struct remove_event *rep)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
* Remove the event from a task's (or a CPU's) list of events.
|
* Remove the event from a task's (or a CPU's) list of events.
|
||||||
*
|
*
|
||||||
* CPU events are removed with a smp call. For task events we only
|
* CPU events are removed with a smp call. For task events we only
|
||||||
|
@ -1728,6 +1754,9 @@ static void __ref perf_remove_from_context(struct perf_event *event,
|
||||||
*/
|
*/
|
||||||
ret = cpu_function_call(event->cpu, __perf_remove_from_context,
|
ret = cpu_function_call(event->cpu, __perf_remove_from_context,
|
||||||
&re);
|
&re);
|
||||||
|
if (ret == -ENXIO)
|
||||||
|
perf_retry_remove(event, &re);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7109,6 +7138,8 @@ static struct pmu perf_swevent = {
|
||||||
.start = perf_swevent_start,
|
.start = perf_swevent_start,
|
||||||
.stop = perf_swevent_stop,
|
.stop = perf_swevent_stop,
|
||||||
.read = perf_swevent_read,
|
.read = perf_swevent_read,
|
||||||
|
|
||||||
|
.events_across_hotplug = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_EVENT_TRACING
|
#ifdef CONFIG_EVENT_TRACING
|
||||||
|
@ -7230,6 +7261,8 @@ static struct pmu perf_tracepoint = {
|
||||||
.start = perf_swevent_start,
|
.start = perf_swevent_start,
|
||||||
.stop = perf_swevent_stop,
|
.stop = perf_swevent_stop,
|
||||||
.read = perf_swevent_read,
|
.read = perf_swevent_read,
|
||||||
|
|
||||||
|
.events_across_hotplug = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline void perf_tp_register(void)
|
static inline void perf_tp_register(void)
|
||||||
|
@ -7517,6 +7550,8 @@ static struct pmu perf_cpu_clock = {
|
||||||
.start = cpu_clock_event_start,
|
.start = cpu_clock_event_start,
|
||||||
.stop = cpu_clock_event_stop,
|
.stop = cpu_clock_event_stop,
|
||||||
.read = cpu_clock_event_read,
|
.read = cpu_clock_event_read,
|
||||||
|
|
||||||
|
.events_across_hotplug = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -7598,6 +7633,8 @@ static struct pmu perf_task_clock = {
|
||||||
.start = task_clock_event_start,
|
.start = task_clock_event_start,
|
||||||
.stop = task_clock_event_stop,
|
.stop = task_clock_event_stop,
|
||||||
.read = task_clock_event_read,
|
.read = task_clock_event_read,
|
||||||
|
|
||||||
|
.events_across_hotplug = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void perf_pmu_nop_void(struct pmu *pmu)
|
static void perf_pmu_nop_void(struct pmu *pmu)
|
||||||
|
|
|
@ -614,6 +614,8 @@ static struct pmu perf_breakpoint = {
|
||||||
.start = hw_breakpoint_start,
|
.start = hw_breakpoint_start,
|
||||||
.stop = hw_breakpoint_stop,
|
.stop = hw_breakpoint_stop,
|
||||||
.read = hw_breakpoint_pmu_read,
|
.read = hw_breakpoint_pmu_read,
|
||||||
|
|
||||||
|
.events_across_hotplug = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
int __init init_hw_breakpoint(void)
|
int __init init_hw_breakpoint(void)
|
||||||
|
|
Loading…
Add table
Reference in a new issue