aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/time/tick-oneshot.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2008-09-03 17:37:03 -0400
committerThomas Gleixner <tglx@linutronix.de>2008-09-05 05:11:52 -0400
commit7205656ab48da29a95d7f55e43a81db755d3cb3a (patch)
tree7721904e6912a9dcd09fc4041dfb07807c2ef4b7 /kernel/time/tick-oneshot.c
parentd4496b39559c6d43f83e4c08b899984f8b8089b5 (diff)
clockevents: enforce reprogram in oneshot setup
In tick_oneshot_setup we program the device to the given next_event, but we do not check the return value. We need to make sure that the device is programmed enforced so the interrupt handler engine starts working. Split out the reprogramming function from tick_program_event() and call it with the device, which was handed in to tick_setup_oneshot(). Set the force argument, so the devices is firing an interrupt. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/time/tick-oneshot.c')
-rw-r--r--kernel/time/tick-oneshot.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/kernel/time/tick-oneshot.c b/kernel/time/tick-oneshot.c
index 450c04935b6..06595c64b0c 100644
--- a/kernel/time/tick-oneshot.c
+++ b/kernel/time/tick-oneshot.c
@@ -23,11 +23,11 @@
23#include "tick-internal.h" 23#include "tick-internal.h"
24 24
25/** 25/**
26 * tick_program_event 26 * tick_program_event internal worker function
27 */ 27 */
28int tick_program_event(ktime_t expires, int force) 28static int __tick_program_event(struct clock_event_device *dev,
29 ktime_t expires, int force)
29{ 30{
30 struct clock_event_device *dev = __get_cpu_var(tick_cpu_device).evtdev;
31 ktime_t now = ktime_get(); 31 ktime_t now = ktime_get();
32 32
33 while (1) { 33 while (1) {
@@ -41,6 +41,16 @@ int tick_program_event(ktime_t expires, int force)
41} 41}
42 42
43/** 43/**
44 * tick_program_event
45 */
46int tick_program_event(ktime_t expires, int force)
47{
48 struct clock_event_device *dev = __get_cpu_var(tick_cpu_device).evtdev;
49
50 return __tick_program_event(dev, expires, force);
51}
52
53/**
44 * tick_resume_onshot - resume oneshot mode 54 * tick_resume_onshot - resume oneshot mode
45 */ 55 */
46void tick_resume_oneshot(void) 56void tick_resume_oneshot(void)
@@ -61,7 +71,7 @@ void tick_setup_oneshot(struct clock_event_device *newdev,
61{ 71{
62 newdev->event_handler = handler; 72 newdev->event_handler = handler;
63 clockevents_set_mode(newdev, CLOCK_EVT_MODE_ONESHOT); 73 clockevents_set_mode(newdev, CLOCK_EVT_MODE_ONESHOT);
64 clockevents_program_event(newdev, next_event, ktime_get()); 74 __tick_program_event(newdev, next_event, 1);
65} 75}
66 76
67/** 77/**