From: john stultz <johnstul@us.ibm.com>
To: Frans Pop <elendil@planet.nl>
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 17:47:43 -0700 [thread overview]
Message-ID: <1236818863.7680.156.camel@localhost.localdomain> (raw)
In-Reply-To: <1236817822.7680.148.camel@localhost.localdomain>
On Wed, 2009-03-11 at 17:30 -0700, john stultz wrote:
> On Wed, 2009-03-11 at 17:03 +0100, Frans Pop wrote:
> > OK, I think I've gotten a lot further now.
> >
> > On Wednesday 11 March 2009, john stultz wrote:
> > > Also the negative conditional you add doesn't really make sense either,
> > > as we expect the xtime.tv_nsec << clock->shift to be larger then
> > > clock->xtime_nsec, as we've rounded it up by one. We then accumulate
> > > the negative difference between them into clock->error.
> >
> > I'm not at all fluent in casts, bit shifting and stuff, so it took a
> > while for the quarter to drop. But AFAICT what you're saying here is
> > exactly the problem.
> >
> > Indeed you do round xtime.tv_nsec up, so when you do
> > clock->xtime_nsec -= (s64)xtime.tv_nsec << clock->shift;
> > or
> > clock->xtime_nsec = clock->xtime_nsec - ((s64)xtime.tv_nsec << clock->shift);
> > the second argument is always going to be bigger than the first, so you
> > always end up with a negative value.
> >
> > > Hmm.. Does the following explicit casting help?
> >
> > Even with the cast you're just papering over the issue that we're moving a
> > negative value into a field that is defined as unsigned:
> > include/linux/clocksource.h: u64 xtime_nsec;
>
> Probably agreed here, xtime_nsec probably should be converted to a s64
> as negative values are possible.
>
>
> However, Its unclear to me if my patch worked or not?
> Did you try it alone?
For a cleaner version, could you try the following, against 2.6.29-git
with no other modification?
thanks
-john
xtime_nsec is expected at times to be negative. Instead of trying to
handle all the shifting properly via casts, define it as a s64 instead
of a u64.
NOT FOR INCLUSION
Signed-off-by: John Stultz <johnstul@us.ibm.com>
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h
index f88d32f..e217000 100644
--- a/include/linux/clocksource.h
+++ b/include/linux/clocksource.h
@@ -86,7 +86,7 @@ struct clocksource {
* more than one cache line.
*/
cycle_t cycle_last ____cacheline_aligned_in_smp;
- u64 xtime_nsec;
+ s64 xtime_nsec;
s64 error;
struct timespec raw_time;
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 900f1b6..387be3c 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -546,7 +546,7 @@ 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;
+ xtime.tv_nsec = (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);
next prev parent reply other threads:[~2009-03-12 0:47 UTC|newest]
Thread overview: 37+ 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
2009-03-11 16:03 ` Frans Pop
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 [this message]
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-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=1236818863.7680.156.camel@localhost.localdomain \
--to=johnstul@us.ibm.com \
--cc=elendil@planet.nl \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.