|
@@ -6776,7 +6776,6 @@ skip_type:
|
|
|
__perf_event_init_context(&cpuctx->ctx);
|
|
|
lockdep_set_class(&cpuctx->ctx.mutex, &cpuctx_mutex);
|
|
|
lockdep_set_class(&cpuctx->ctx.lock, &cpuctx_lock);
|
|
|
- cpuctx->ctx.type = cpu_context;
|
|
|
cpuctx->ctx.pmu = pmu;
|
|
|
|
|
|
__perf_cpu_hrtimer_init(cpuctx, cpu);
|
|
@@ -7420,7 +7419,19 @@ SYSCALL_DEFINE5(perf_event_open,
|
|
|
* task or CPU context:
|
|
|
*/
|
|
|
if (move_group) {
|
|
|
- if (group_leader->ctx->type != ctx->type)
|
|
|
+ /*
|
|
|
+ * Make sure we're both on the same task, or both
|
|
|
+ * per-cpu events.
|
|
|
+ */
|
|
|
+ if (group_leader->ctx->task != ctx->task)
|
|
|
+ goto err_context;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Make sure we're both events for the same CPU;
|
|
|
+ * grouping events for different CPUs is broken; since
|
|
|
+ * you can never concurrently schedule them anyhow.
|
|
|
+ */
|
|
|
+ if (group_leader->cpu != event->cpu)
|
|
|
goto err_context;
|
|
|
} else {
|
|
|
if (group_leader->ctx != ctx)
|