lkml.org 
[lkml]   [2011]   [May]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [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)

    \
     
     \ /
      Last update: 2011-05-13 12:05    [W:4.033 / U:8.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site