aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorBjoern Brandenburg <bbb@mpi-sws.org>2012-09-04 06:45:54 -0400
committerBjoern Brandenburg <bbb@mpi-sws.org>2012-10-18 16:14:05 -0400
commita13904d4b6d04278deb6841020dd7dee9867745e (patch)
tree89cd8206405935c8a6b600a8da3ac042a116a45c /kernel
parent1ae3a8f858a6eb6a75a78fb8f35c98fa870dfb87 (diff)
Trace IPI-related IRQs with ft_irq_fired()
IPIs have some special cases where irq_enter() is not called. This caused ft_irq_fired() to "miss" some rescheduling-related interrupts, which in turn may cause outliers. This patch makes sure ft_irq_fired() is called on scheduling-related IPIs.
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched.c6
1 files changed, 5 insertions, 1 deletions
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