public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Frans Pop <elendil@planet.nl>
To: john stultz <johnstul@us.ibm.com>
Cc: linux-s390@vger.kernel.org, Roman Zippel <zippel@linux-m68k.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [BUG,2.6.28,s390] Fails to boot in Hercules S/390 emulator
Date: Wed, 11 Mar 2009 10:00:27 +0100	[thread overview]
Message-ID: <200903111000.29269.elendil@planet.nl> (raw)
In-Reply-To: <1236733226.6080.28.camel@localhost>

On Wednesday 11 March 2009, john stultz wrote:
> On Mon, 2009-03-09 at 16:04 +0100, Frans Pop wrote:
> > And that resulted in:
> >      0.004175! Negative result: 166039808000 - 166039808256
>
> Hrm. That doesn't make sense.

It may not make sense, but that's still what I get ;-)

I've tried again with a bit more elaborate patch:
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -546,9 +546,26 @@ void update_wall_time(void)
 	/* store full nanoseconds into xtime after rounding it up and
 	 * add the remainder to the error difference.
 	 */
-	xtime.tv_nsec = ((s64)clock->xtime_nsec >> clock->shift) + 1;
-	clock->xtime_nsec -= (s64)xtime.tv_nsec << clock->shift;
-	clock->error += clock->xtime_nsec << (NTP_SCALE_SHIFT - clock->shift);
+	u64 xtns1, xtns2, xtns3;
+
+	xtns1 = clock->xtime_nsec;
+	xtns2 = xtns1;
+	xtime.tv_nsec = ((s64)xtns1 >> clock->shift) + 1;
+	xtns2 -= (s64)xtime.tv_nsec << clock->shift;
+	clock->xtime_nsec = xtns2;
+	xtns3 = clock->xtime_nsec;
+	clock->error += (s64)xtns3 << (NTP_SCALE_SHIFT - clock->shift);
+
+	if (unlikely(xtns1 < ((s64)xtime.tv_nsec << clock->shift)))
+		printk("Wall time error. "
+			"xtns1: %llu, tv_nsec %lu, shifted tv_nsec %lld, "
+			"xtns2: %llu, xtns3: %llu, error: %lld\n",
+			(unsigned long long)xtns1,
+			xtime.tv_nsec,
+			(long long)((s64)xtime.tv_nsec << clock->shift),
+			(unsigned long long)xtns2,
+			(unsigned long long)xtns3,
+			(long long)clock->error);
 
 	update_xtime_cache(cyc2ns(clock, offset));
 

This results in tons of messages passing by and the boot going nowhere.
Sample:
Wall time error. xtns1: 15206684608, tv_nsec 59401112, shifted tv_nsec 15206684672,
   xtns2: 18446744063709451552, xtns3: 18446744063709451552, error: -13053227561031008
Wall time error. xtns1: 15206684737, tv_nsec 59401113, shifted tv_nsec 15206684928,
   xtns2: 18446744073709551425, xtns3: 18446744073709551425, error: -13053229775623520
Wall time error. xtns1: 15206684862, tv_nsec 59401113, shifted tv_nsec 15206684928,
   xtns2: 18446744063709451550, xtns3: 18446744063709451550, error: -13053241856098304
Wall time error. xtns1: 15206684995, tv_nsec 59401114, shifted tv_nsec 15206685184,
   xtns2: 18446744073709551427, xtns3: 18446744073709551427, error: -13053244070690816
Wall time error. xtns1: 15206685116, tv_nsec 59401114, shifted tv_nsec 15206685184,
   xtns2: 18446744063709451548, xtns3: 18446744063709451548, error: -13053246151065600


So it looks to me as if we're rounding up instead of down (and my
'unlikely' was probably too optimistic).
Code error? Compiler error? Hercules bug possibly?

I've got Hercules set to update the clock every 500 microseconds using
'TIMERINT 500' in the configuration file. From the documentation:
   "Specifies the internal timers update interval, in microseconds. This
    parameter specifies how frequently Hercules's internal timers-update
    thread updates the TOD Clock, CPU Timer, and other architectural
    related clock/timer values. The default interval is 50 microseconds,
    which strikes a reasonable balance between clock accuracy and overall
    host performance. The minimum allowed value is 1 microsecond and the
    maximum is 1000000 microseconds (i.e. one second)."

> Hmm.. Does the following explicit casting help?

I included that in the patch, but due to the large number of "errors" I
got I couldn't tell. Can test with just that cast, but it still seems to
me the problem is in the above.

Cheers,
FJP

  reply	other threads:[~2009-03-11  9:00 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-08  1:30 [BUG,2.6.28,s390] Fails to boot in Hercules S/390 emulator Frans Pop
2009-03-08  7:21 ` Frans Pop
2009-03-09 15:04 ` Frans Pop
2009-03-11  1:00   ` john stultz
2009-03-11  9:00     ` Frans Pop [this message]
2009-03-11 16:03     ` Frans Pop
2009-03-11 17:05       ` Frans Pop
2009-03-11 19:05       ` Frans Pop
2009-03-12  0:34         ` john stultz
2009-03-12  4:47           ` john stultz
2009-03-12  6:51             ` Frans Pop
2009-03-17  5:15               ` john stultz
2009-03-17 14:39                 ` Frans Pop
2009-03-12  0:30       ` john stultz
2009-03-12  0:47         ` john stultz
2009-03-12  1:30           ` Thomas Gleixner
2009-03-12  1:57             ` john stultz
2009-03-12  7:50               ` Thomas Gleixner
2009-03-12 17:05           ` [BUG,2.6.28,s390] Fails to boot in Hercules S/390 emulator - hang traced Frans Pop
2009-03-13 11:48             ` Frans Pop
2009-03-13 17:34               ` Frans Pop
2009-03-17  5:09               ` john stultz
2009-03-18  2:26             ` john stultz
2009-03-18  2:54               ` john stultz
2009-03-18  9:28                 ` Martin Schwidefsky
2009-03-18 12:07                   ` Frans Pop
2009-03-18 15:48                     ` John Stultz
2009-03-23  0:11                       ` Frans Pop
2009-03-23 22:19                         ` John Stultz
2009-03-24  8:23                           ` Martin Schwidefsky
2009-04-14 22:27                         ` [PATCH] Avoid possible endless loop when using jiffies clocksource and ONESHOT mode clockevent john stultz
2009-03-18 15:39                   ` [BUG,2.6.28,s390] Fails to boot in Hercules S/390 emulator - hang traced John Stultz
2009-03-10  3:09 ` [BUG,2.6.28,s390] Fails to boot in Hercules S/390 emulator John Stultz
2009-03-10  3:37   ` Frans Pop
2009-03-10  3:38     ` John Stultz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200903111000.29269.elendil@planet.nl \
    --to=elendil@planet.nl \
    --cc=johnstul@us.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=zippel@linux-m68k.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox