diff options
-rw-r--r-- | arch/x86/kernel/smp.c | 2 | ||||
-rw-r--r-- | kernel/sched.c | 6 |
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); | |||
251 | void smp_pull_timers_interrupt(struct pt_regs *regs) | 251 | void 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 | ||
258 | struct smp_ops smp_ops = { | 260 | struct 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 |