summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@elastic.org>2008-05-05 13:09:15 -0400
committerFrank Ch. Eigler <fche@elastic.org>2008-05-05 13:09:15 -0400
commitc5f8fe8068f9827deb3f720d71fc7c5153390603 (patch)
tree4f57f35b6a50146f711c7f107240c2d8fabdd45f
parentc796d8126eab0bd640708854ef662ac7761669f8 (diff)
downloadsystemtap-steved-c5f8fe8068f9827deb3f720d71fc7c5153390603.tar.gz
systemtap-steved-c5f8fe8068f9827deb3f720d71fc7c5153390603.tar.xz
systemtap-steved-c5f8fe8068f9827deb3f720d71fc7c5153390603.zip
PR6481: timer reset needs irqs reenabled
-rw-r--r--runtime/ChangeLog6
-rw-r--r--runtime/time.c7
2 files changed, 11 insertions, 2 deletions
diff --git a/runtime/ChangeLog b/runtime/ChangeLog
index f5ae91fb..8410b918 100644
--- a/runtime/ChangeLog
+++ b/runtime/ChangeLog
@@ -1,3 +1,9 @@
+2008-05-05 Frank Ch. Eigler <fche@elastic.org>
+
+ PR 6481.
+ * time.c (__stp_time_timer_callback): Reenable irq's before
+ mod_timer.
+
2008-05-05 David Smith <dsmith@redhat.com>
* task_finder.c (stap_utrace_detach_ops): Make sure we ignore
diff --git a/runtime/time.c b/runtime/time.c
index 52a2edbb..8a0b6fad 100644
--- a/runtime/time.c
+++ b/runtime/time.c
@@ -131,10 +131,13 @@ __stp_time_timer_callback(unsigned long val)
time->base_cycles = cycles;
write_sequnlock(&time->lock);
+ local_irq_restore(flags);
+ /* PR6481: reenable IRQs before resetting the timer.
+ XXX: The worst that can probably happen is that we get
+ two consecutive timer resets. */
+
if (likely(stp_timer_reregister))
mod_timer(&time->timer, jiffies + 1);
-
- local_irq_restore(flags);
}
/* This is called as an IPI, with interrupts disabled. */