diff options
| author | Bjoern Brandenburg <bbb@mpi-sws.org> | 2015-08-09 07:18:45 -0400 |
|---|---|---|
| committer | Bjoern Brandenburg <bbb@mpi-sws.org> | 2017-05-26 17:12:22 -0400 |
| commit | 3adfeae8db15fd5aa4027a906f7f4b1b609cb2f9 (patch) | |
| tree | 70418df1ce83d270704f750afc1a74e7079bd0df /kernel | |
| parent | 49e9c1480b1bb8cd89c9caf7850d37d33584c104 (diff) | |
Integrate ft_irq_fired() with Linux
This patch hooks up Feather-Trace's ft_irq_fired() handler with
Linux's interrupt handling infrastructure.
IRQ tracing: ft_irq_fired() only if irq_enter() was skipped
On x86, the rescheduling IPI path already calls irq_enter(), which
calls ft_irq_fired(), so we don't have to do it again.
IRQ tracing: don't count softirqs
Only triggered by irq_exit(), which implies that we called
irq_enter(), which means that we already traced the current
hard IRQ.
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/sched/core.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 154fd689fe02..6440fe53d1a8 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c | |||
| @@ -1806,7 +1806,14 @@ void scheduler_ipi(void) | |||
| 1806 | preempt_fold_need_resched(); | 1806 | preempt_fold_need_resched(); |
| 1807 | 1807 | ||
| 1808 | if (llist_empty(&this_rq()->wake_list) && !got_nohz_idle_kick()) | 1808 | if (llist_empty(&this_rq()->wake_list) && !got_nohz_idle_kick()) |
| 1809 | { | ||
| 1810 | #ifndef CONFIG_ARCH_CALLS_IRQ_ENTER_ON_RESCHED_IPI | ||
| 1811 | /* If we don't call irq_enter(), we need to triggger the IRQ | ||
| 1812 | * tracing manually. */ | ||
| 1813 | ft_irq_fired(); | ||
| 1814 | #endif | ||
| 1809 | return; | 1815 | return; |
| 1816 | } | ||
| 1810 | 1817 | ||
| 1811 | /* | 1818 | /* |
| 1812 | * Not all reschedule IPI handlers call irq_enter/irq_exit, since | 1819 | * Not all reschedule IPI handlers call irq_enter/irq_exit, since |
