Re: [PATCH] ARM: twd: Adjust localtimer frequency withcpufreqnotifiers
From: Colin Cross
Date: Fri May 13 2011 - 17:24:18 EST
On Fri, May 13, 2011 at 3:02 AM, Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote:
> Does the following work for you ?
Not if the comments are accurate.
> Thanks,
>
> tglx
>
> ---------->
> Subject: clock-ev-reconf.patch
> From: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Date: Fri, 13 May 2011 10:53:13 +0200
>
> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> ---
> 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.
> + */
We need to call this from a cpufreq notifier with interrupts disabled,
not from idle.
> +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)
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/