diff options
| author | Michael Cree <mcree@orcon.net.nz> | 2010-09-19 02:05:40 -0400 |
|---|---|---|
| committer | Matt Turner <mattst88@gmail.com> | 2010-09-18 23:06:19 -0400 |
| commit | bdc8b8914b17cf97b53e5f7af8168d68cfb089d6 (patch) | |
| tree | 6535ea69d983e8e124e3566cd5d6847ab3a4d831 | |
| parent | 531f0474bf889d489b28ea4b15e87b7cbb77f580 (diff) | |
alpha: Shift perf event pending work earlier in timer interrupt
Pending work from the performance event subsystem is executed in
the timer interrupt. This patch shifts the call to
perf_event_do_pending() before the call to update_process_times()
as the latter may call back into the perf event subsystem and it
is prudent to have the pending work executed first.
Signed-off-by: Michael Cree <mcree@orcon.net.nz>
Signed-off-by: Matt Turner <mattst88@gmail.com>
| -rw-r--r-- | arch/alpha/kernel/time.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/arch/alpha/kernel/time.c b/arch/alpha/kernel/time.c index eacceb26d9c8..396af1799ea4 100644 --- a/arch/alpha/kernel/time.c +++ b/arch/alpha/kernel/time.c | |||
| @@ -191,16 +191,16 @@ irqreturn_t timer_interrupt(int irq, void *dev) | |||
| 191 | 191 | ||
| 192 | write_sequnlock(&xtime_lock); | 192 | write_sequnlock(&xtime_lock); |
| 193 | 193 | ||
| 194 | #ifndef CONFIG_SMP | ||
| 195 | while (nticks--) | ||
| 196 | update_process_times(user_mode(get_irq_regs())); | ||
| 197 | #endif | ||
| 198 | |||
| 199 | if (test_perf_event_pending()) { | 194 | if (test_perf_event_pending()) { |
| 200 | clear_perf_event_pending(); | 195 | clear_perf_event_pending(); |
| 201 | perf_event_do_pending(); | 196 | perf_event_do_pending(); |
| 202 | } | 197 | } |
| 203 | 198 | ||
| 199 | #ifndef CONFIG_SMP | ||
| 200 | while (nticks--) | ||
| 201 | update_process_times(user_mode(get_irq_regs())); | ||
| 202 | #endif | ||
| 203 | |||
| 204 | return IRQ_HANDLED; | 204 | return IRQ_HANDLED; |
| 205 | } | 205 | } |
| 206 | 206 | ||
