lkml.org 
[lkml]   [2003]   [Nov]   [19]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
FromThomas Schlichter <>
SubjectRe: linux-2.6.0-test9-mm3_acpi-pm-monotonic-fix_A0
DateWed, 19 Nov 2003 08:34:23 +0100
On Tuesday 18 November 2003 23:59, john stultz wrote:
> On Mon, 2003-11-17 at 15:46, Thomas Schlichter wrote:
> > But when booting with the PMTMR clock selected, my Interactivity test
> > fails again. :-( Maybe there is a problem in the PMTMR's monotonic clock
> > part...?!
>
> Good call! I was mis-adding in conversion to nanoseconds. The patch
> below should fix it (Andrew, feel free to ignore this, I'll sync up all
> the acpi-pm changes with you later).

Well, your patch was the correct direction, but it did not completely reach 
the target... :-( The 'monotonic_base' variable in the PMTMR stores its value 
in microseconds. So the 'base' value has to be convertet to nanoseconds, 
too...

A patch that corrects that is attached...

(Btw. another solution would be to store all the values in nanoseconds by 
replacing the cyc2us function with a cyc2ns function...)

> Although I'm finding that the sched_clock->monotonic_clock patch doesn't
> look like a win. With that patch sched_clock takes ~400-700 cycles using
> clock=pmtmr. With your "fix-sched_clock.diff" patch its less then 40
> cycles.
>
> While better accuracy is nice, I can't imagine the 10-20x cost of
> sched_clock is worth it. So I think your fix is the best solution.

I think you are right, but the sched_clock->monotonic_clock patch helped us 
finding the problems in the monotonic_clock_pmtmr() function... ;-)

> thanks
> -john

np ;-)
   Thomas
--- linux-2.6.0-test9-mm3_patched/arch/i386/kernel/timers/timer_pm.c.orig	Wed Nov 19 08:05:19 2003
+++ linux-2.6.0-test9-mm3_patched/arch/i386/kernel/timers/timer_pm.c	Wed Nov 19 08:07:41 2003
@@ -150,7 +150,7 @@ static unsigned long long monotonic_cloc
 
 	/* convert to nanoseconds */
 	ret = ((this_offset - last_offset) & ACPI_PM_MASK);
-	ret = base + (cyc2us(ret)*1000);
+	ret = (base + cyc2us(ret)) * NSEC_PER_USEC;
 	return ret;
 }
 [unhandled content-type:application/pgp-signature]
\
 
 \ /
  Last update: 2005-03-22 12:58    [from the cache]
©2003-2008