diff --git a/kernel/sched/perf_error_detection.c b/kernel/sched/perf_error_detection.c index f67957f40eaa39f2e2473bf83c413936b3d35533..8c308497312c911bd3d90f6be97828e1a2f60363 100644 --- a/kernel/sched/perf_error_detection.c +++ b/kernel/sched/perf_error_detection.c @@ -14,6 +14,7 @@ * initialize perf event for new task */ int init_perf_event(struct plan_entry *plan_entry, struct perf_event **pevent){ + unsigned long irq_flags; struct perf_event_attr pe; memset(&pe, 0, sizeof(struct perf_event_attr)); @@ -32,7 +33,10 @@ int init_perf_event(struct plan_entry *plan_entry, struct perf_event **pevent){ /* Not needed on 3.2? */ // pe.wakeup_events = 1; + // disable irqs to make 'perf_event_ctx_activate' in 'kernel/events/core.c' happy + local_irq_save(irq_flags); *pevent = perf_event_create(&pe, 0, plan_entry->task_struct); + local_irq_restore(irq_flags); if (IS_ERR(pevent)) { printk(KERN_WARNING "PB ERROR INITIALISING PERF EVENT\n");