Messages in this thread Patch in this message | | | Date | Fri, 13 May 2011 12:02:13 +0200 (CEST) | From | Thomas Gleixner <> | Subject | Re: [PATCH] ARM: twd: Adjust localtimer frequency withcpufreqnotifiers |
| |
On Thu, 12 May 2011, Linus Walleij wrote:
> 2011/3/6 Linus Walleij <linus.walleij@linaro.org>: > > On Sun, Mar 6, 2011 at 6:42 PM, Colin Cross <ccross@android.com> wrote: > > > >> Is there any way > >> for a clockevent to invalidate the current event and ask for it to be > >> reprogrammed? > > > > TGLX will know for sure... Thomas? > > > > (This is inside a CPUfreq hook for a localtimer for the record.) > > I discussed this briefly with TGLX at the UDS here and he's confident > we could add some nifty feature to reprogram an event. I dare not > try to guess where the code would sit or how it'd look...
Does the following work for you ?
Thanks,
tglx
----------> Subject: clock-ev-reconf.patch From: Thomas Gleixner <tglx@linutronix.de> Date: Fri, 13 May 2011 10:53:13 +0200
Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- include/linux/clockchips.h | 2 ++ kernel/time/clockevents.c | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+)
Index: linux-2.6/include/linux/clockchips.h =================================================================== --- linux-2.6.orig/include/linux/clockchips.h +++ linux-2.6/include/linux/clockchips.h @@ -132,6 +132,8 @@ extern int clockevents_program_event(str extern void clockevents_handle_noop(struct clock_event_device *dev); +extern int clockevents_reconfigure(struct clock_event_device *ce, u32 freq, u32 minsec); + static inline void clockevents_calc_mult_shift(struct clock_event_device *ce, u32 freq, u32 minsec) { Index: linux-2.6/kernel/time/clockevents.c =================================================================== --- linux-2.6.orig/kernel/time/clockevents.c +++ linux-2.6/kernel/time/clockevents.c @@ -133,6 +133,30 @@ int clockevents_program_event(struct clo } /** + * clockevents_reconfigure - Reconfigure and reprogram a clock event device. + * @dev: device to modify + * @freq: new device frequency + * @secr: guaranteed runtime conversion range in seconds + * + * Reconfigure and reprogram a clock event device in oneshot + * mode. Must only be called from low level idle code where + * interaction with hrtimers/nohz code etc. is not possible and + * guaranteed not to conflict. Must be called with interrupts + * disabled! + * Returns 0 on success, -ETIME when the event is in the past or + * -EINVAL when called with invalid parameters. + */ +int clockevents_reconfigure(struct clock_event_device *dev, u32 freq, u32 secr) +{ + if (dev->mode != CLOCK_EVT_MODE_ONESHOT) + return -EINVAL; + + clockevents_calc_mult_shift(dev, freq, secr ? secr : 1); + + return clockevents_program_event(dev, dev->next_event, ktime_get()); +} + +/** * clockevents_register_notifier - register a clock events change listener */ int clockevents_register_notifier(struct notifier_block *nb)
| |