aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/smp.c2
-rw-r--r--kernel/sched.c6
2 files changed, 7 insertions, 1 deletions
diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c
index ed4c4f54e2ae..f5e294040b1c 100644
--- a/arch/x86/kernel/smp.c
+++ b/arch/x86/kernel/smp.c
@@ -251,8 +251,10 @@ extern void hrtimer_pull(void);
251void smp_pull_timers_interrupt(struct pt_regs *regs) 251void smp_pull_timers_interrupt(struct pt_regs *regs)
252{ 252{
253 ack_APIC_irq(); 253 ack_APIC_irq();
254 irq_enter();
254 TRACE("pull timer interrupt\n"); 255 TRACE("pull timer interrupt\n");
255 hrtimer_pull(); 256 hrtimer_pull();
257 irq_exit();
256} 258}
257 259
258struct smp_ops smp_ops = { 260struct smp_ops smp_ops = {
diff --git a/kernel/sched.c b/kernel/sched.c
index cbb1b5f57117..1d7b38a7ff25 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -2597,8 +2597,12 @@ void scheduler_ipi(void)
2597 struct rq *rq = this_rq(); 2597 struct rq *rq = this_rq();
2598 struct task_struct *list = xchg(&rq->wake_list, NULL); 2598 struct task_struct *list = xchg(&rq->wake_list, NULL);
2599 2599
2600 if (!list) 2600 if (!list) {
2601 /* If we don't call irq_enter(), we need to trigger the IRQ
2602 * tracing manually. */
2603 ft_irq_fired();
2601 return; 2604 return;
2605 }
2602 2606
2603 /* 2607 /*
2604 * Not all reschedule IPI handlers call irq_enter/irq_exit, since 2608 * Not all reschedule IPI handlers call irq_enter/irq_exit, since