diff options
author | Bjoern Brandenburg <bbb@mpi-sws.org> | 2012-09-04 06:45:54 -0400 |
---|---|---|
committer | Bjoern Brandenburg <bbb@mpi-sws.org> | 2012-10-18 16:14:05 -0400 |
commit | a13904d4b6d04278deb6841020dd7dee9867745e (patch) | |
tree | 89cd8206405935c8a6b600a8da3ac042a116a45c /kernel | |
parent | 1ae3a8f858a6eb6a75a78fb8f35c98fa870dfb87 (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.c | 6 |
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 |