Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8381f65d authored by Jamie Iles's avatar Jamie Iles Committed by Ingo Molnar
Browse files

sched/perf: Make sure irqs are disabled for perf_event_task_sched_in()



perf_event_task_sched_in() expects interrupts to be disabled,
but on architectures with __ARCH_WANT_INTERRUPTS_ON_CTXSW
defined, this isn't true. If this is defined, disable irqs
around the call in finish_task_switch().

Signed-off-by: default avatarJamie Iles <jamie.iles@picochip.com>
Acked-by: default avatarPeter Zijlstra <peterz@infradead.org>
Cc: Russell King - ARM Linux <linux@arm.linux.org.uk>
LKML-Reference: <1262964453-27370-1-git-send-email-jamie.iles@picochip.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent cf553114
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -2783,7 +2783,13 @@ static void finish_task_switch(struct rq *rq, struct task_struct *prev)
	 */
	prev_state = prev->state;
	finish_arch_switch(prev);
#ifdef __ARCH_WANT_INTERRUPTS_ON_CTXSW
	local_irq_disable();
#endif /* __ARCH_WANT_INTERRUPTS_ON_CTXSW */
	perf_event_task_sched_in(current);
#ifdef __ARCH_WANT_INTERRUPTS_ON_CTXSW
	local_irq_enable();
#endif /* __ARCH_WANT_INTERRUPTS_ON_CTXSW */
	finish_lock_switch(rq, prev);

	fire_sched_in_preempt_notifiers(current);