Commit ea16e1b4 authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Greg Kroah-Hartman

clockevents: enforce reprogram in oneshot setup

commit 7205656a upstream

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: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent cf25095c
......@@ -23,11 +23,11 @@
#include "tick-internal.h"
/**
* tick_program_event
* tick_program_event internal worker function
*/
int tick_program_event(ktime_t expires, int force)
static int __tick_program_event(struct clock_event_device *dev,
ktime_t expires, int force)
{
struct clock_event_device *dev = __get_cpu_var(tick_cpu_device).evtdev;
ktime_t now = ktime_get();
while (1) {
......@@ -40,6 +40,16 @@ int tick_program_event(ktime_t expires, int force)
}
}
/**
* tick_program_event
*/
int tick_program_event(ktime_t expires, int force)
{
struct clock_event_device *dev = __get_cpu_var(tick_cpu_device).evtdev;
return __tick_program_event(dev, expires, force);
}
/**
* tick_resume_onshot - resume oneshot mode
*/
......@@ -61,7 +71,7 @@ void tick_setup_oneshot(struct clock_event_device *newdev,
{
newdev->event_handler = handler;
clockevents_set_mode(newdev, CLOCK_EVT_MODE_ONESHOT);
clockevents_program_event(newdev, next_event, ktime_get());
__tick_program_event(newdev, next_event, 1);
}
/**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment