Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Mar 2002 03:23:47 +1100 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Poul-Henning Kamp <phk@critter.freebsd.dk>
Cc:        <qhwt@myrealbox.com>, <current@FreeBSD.ORG>
Subject:   Re: Won't boot after the commits to timecounter code 
Message-ID:  <20020307031019.X9539-100000@gamplex.bde.org>
In-Reply-To: <91591.1015400958@critter.freebsd.dk>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 6 Mar 2002, Poul-Henning Kamp wrote:

> The only thing I know off right now is this thing from BDE which
> I havn't been able to verify yet:

I got the hang for all boots, but it was a local problem.  I had added
a nanouptime() call the tc_windup(), and this spins forever when
tc_windup() is called from tc_init() or switch_timecounter() (because
timecounter->generation is 0).  At least one of these calls is made
unconditionally at boot time, but there is normally no problem, at
least if WITNESS and KTR are not enabled (my default) because the
functions that spin on the generation update are not called.  But
interrupt activity might result in them being called, and WITNESS
and/or KTR call them if a lock is witnessed.

The following patch is the result of attempting to debug this.  I first
had to debug the debugger, since it has the same problem.

> ============================================================================
> From:    Bruce Evans <bde@zeta.org.au>
> Subject: dummy_timecounter broken; breaks booting with -d
> To:      <phk@freebsd.org>
> Message-Id: <20020305075815.D2623-100000@gamplex.bde.org>
> Date:    Tue, 05 Mar 2002 08:09:26 +1100
>
> %%%
> Index: kern_tc.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/kern/kern_tc.c,v
> retrieving revision 1.116
> diff -u -2 -r1.116 kern_tc.c
> --- kern_tc.c	26 Feb 2002 09:16:27 -0000	1.116
> +++ kern_tc.c	4 Mar 2002 21:08:03 -0000
> @@ -192,4 +252,14 @@
>  		gen = tc->tc_generation;
>  		bintime2timeval(&tc->tc_offset, tvp);
> +		/*
> +		 * XXX dummy_timecounter is now broken.  Its tc_get_timecount
> +		 * needs to be called before it works, and that doesn't
> +		 * always happen naturally.  In particular, we spin forever
> +		 * here after booting with -d unless we do an unnatural call
> +		 * here, since the screen timeout code is always run on entry
> +		 * to ddb, and it calls here.
> +		 */
> +		if (gen == 0 && timecounter == &dummy_timecounter)
> +			(void)tc->tc_get_timecount(tc);
>  	} while (gen == 0 || gen != tc->tc_generation);
>  }
> %%%
>
> Bruce
>
>
> In message <20020306054514.GA395@gzl>, qhwt@myrealbox.com writes:
> >Hello.
> >After upgrading to the kernel as of 2002-03-03 00:00:00(UTC), it stopped
> >booting just after the message:
> >
> >Timecounter "i8254"  frequency 1193182 Hz
> >
> >With some debugging printf()'s inserted, I found it was tc->tc_get_timecount()
> >called from tco_delta() called just after the bcopy() in tc_windup().
> >So maybe the next place I have to look at is i8254_get_timecount(), which is in
> >/sys/i386/isa/clock.c, but the last (effective) commit to this file is
> >revision 1.180(at the end of January).
> >
> >I couldn't even drop into DDB; no response other than to power button.
> >The last bootable(and stable so far) kernel is from 2002-02-24.
> >I don't think this is caused by some leftover in the work directory
> >since I always build kernels in a new empty directory under /usr/obj.
> >
> >Any (clue|fix)\?
> >
> >To Unsubscribe: send mail to majordomo@FreeBSD.org
> >with "unsubscribe freebsd-current" in the body of the message
> >
>
> --
> Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
> phk@FreeBSD.ORG         | TCP/IP since RFC 956
> FreeBSD committer       | BSD since 4.3-tahoe
> Never attribute to malice what can adequately be explained by incompetence.
>
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-current" in the body of the message

Bruce


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020307031019.X9539-100000>