Messages in this thread | | | Subject | Re: [PATCH] U300 sched_clock implementation | From | Peter Zijlstra <> | Date | Sun, 24 May 2009 09:57:18 +0200 |
| |
On Sat, 2009-05-23 at 23:46 +0200, Linus Walleij wrote:
> This overrides the global sched_clock() symbol in the Linux > scheduler with a local implementation which takes advantage of > the timesource in U300 giving a scheduling resolution of 1us. The > solution is the same as found in the OMAP2 core code.
We assume sched_clock() to return time in ns (e-9) resolution.
> Signed-off-by: Linus Walleij <linus.walleij@stericsson.com> > --- > arch/arm/mach-u300/timer.c | 16 ++++++++++++++++ > 1 files changed, 16 insertions(+), 0 deletions(-) > > diff --git a/arch/arm/mach-u300/timer.c b/arch/arm/mach-u300/timer.c > index 4bf82f8..222de18 100644 > --- a/arch/arm/mach-u300/timer.c > +++ b/arch/arm/mach-u300/timer.c > @@ -346,6 +346,22 @@ static struct clocksource clocksource_u300_1mhz = { > .flags = CLOCK_SOURCE_IS_CONTINUOUS, > }; > > +/* > + * Override the global weak sched_clock symbol with this > + * local implementation which uses the clocksource to get some > + * better resolution when scheduling the kernel. We accept that > + * this wraps around for now, since it is just a relative time > + * stamp. (Inspired by OMAP implementation.) > + */ > +unsigned long long sched_clock(void) > +{ > + unsigned long long ret; > + > + ret = (unsigned long long) u300_get_cycles(); > + ret = (ret * clocksource_u300_1mhz.mult_orig) >> > + clocksource_u300_1mhz.shift; > + return ret; > +} > > /* > * This sets up the system timers, clock source and clock event. > -- > 1.6.2.1
| |