Re: git: 84369dd52369 - main - x86: Probe the TSC frequency earlier

From: Mark Johnston <markj_at_freebsd.org>
Date: Fri, 04 Mar 2022 18:31:10 UTC
On Fri, Mar 04, 2022 at 01:15:29PM -0500, Shawn Webb wrote:
> On Fri, Mar 04, 2022 at 12:52:26PM -0500, Shawn Webb wrote:
> > On Fri, Mar 04, 2022 at 10:13:54AM -0500, Mark Johnston wrote:
> > > On Fri, Mar 04, 2022 at 09:24:47AM -0500, Shawn Webb wrote:
> > > > On Tue, Mar 01, 2022 at 02:39:55PM +0000, Mark Johnston wrote:
> > > > > The branch main has been updated by markj:
> > > > > 
> > > > > URL: https://cgit.FreeBSD.org/src/commit/?id=84369dd52369cbae28970dca20a53d3de1719907
> > > > > 
> > > > > commit 84369dd52369cbae28970dca20a53d3de1719907
> > > > > Author:     Mark Johnston <markj@FreeBSD.org>
> > > > > AuthorDate: 2022-03-01 14:39:35 +0000
> > > > > Commit:     Mark Johnston <markj@FreeBSD.org>
> > > > > CommitDate: 2022-03-01 14:39:35 +0000
> > > > > 
> > > > >     x86: Probe the TSC frequency earlier
> > > > >     
> > > > >     This lets us use the TSC to implement early DELAY, limiting the use of
> > > > >     the sometimes-unreliable 8254 PIT.
> > > > >     
> > > > >     PR:             262155
> > > > >     Reviewed by:    emaste
> > > > >     Tested by:      emaste, mike tancsa <mike@sentex.net>, Stefan Hegnauer <stefan.hegnauer@gmx.ch>
> > > > >     MFC after:      1 month
> > > > >     Sponsored by:   The FreeBSD Foundation
> > > > >     Differential Revision:  https://reviews.freebsd.org/D34367
> > > > > ---
> > > > >  sys/amd64/amd64/machdep.c |  14 +++++-
> > > > >  sys/i386/i386/machdep.c   |  11 ++++-
> > > > >  sys/x86/include/clock.h   |   3 +-
> > > > >  sys/x86/isa/clock.c       |   4 +-
> > > > >  sys/x86/x86/tsc.c         | 123 +++++++++++++++++++++++++---------------------
> > > > >  5 files changed, 94 insertions(+), 61 deletions(-)
> > > > 
> > > > Hey Mark,
> > > > 
> > > > Something about this commit breaks booting in Hyper-V. Reverting this
> > > > particular commit makes Hyper-V happy again.
> > > 
> > > The patch below might be sufficient.  I'll test it in Azure but it'll
> > > take me some time.
> > > 
> > > diff --git a/sys/x86/x86/delay.c b/sys/x86/x86/delay.c
> > > index c767250954da..95b994b15f81 100644
> > > --- a/sys/x86/x86/delay.c
> > > +++ b/sys/x86/x86/delay.c
> > > @@ -89,7 +89,7 @@ delay_tc(int n)
> > >  		return (1);
> > >  	}
> > >  	tc = timecounter;
> > > -	if (tc->tc_quality <= 0)
> > > +	if (tc == NULL || tc->tc_quality <= 0)
> > >  		return (0);
> > >  	func = tc->tc_get_timecount;
> > >  	mask = tc->tc_counter_mask;
> > 
> > Great! I'll give this patch a try and report back.
> 
> The proposed patch did not result in successful boot.

Ok, I forgot about the dummy timecounter, so that patch did nothing.
Can you try this one instead, please? https://reviews.freebsd.org/D34444

I wasn't able to reproduce any problems on Azure, but there HyperV
provides an emulated 8254 timer.