|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v6 1/2] x86/time: introduce command line option to select wallclock
On Thu, Sep 12, 2024 at 03:47:53PM +0200, Roger Pau Monné wrote:
> On Thu, Sep 12, 2024 at 03:30:29PM +0200, Marek Marczykowski-Górecki wrote:
> > On Thu, Sep 12, 2024 at 02:56:55PM +0200, Roger Pau Monné wrote:
> > > On Thu, Sep 12, 2024 at 01:57:00PM +0200, Jan Beulich wrote:
> > > > On 12.09.2024 13:15, Roger Pau Monne wrote:
> > > > > --- a/xen/arch/x86/time.c
> > > > > +++ b/xen/arch/x86/time.c
> > > > > @@ -1552,6 +1552,35 @@ static const char *__init
> > > > > wallclock_type_to_string(void)
> > > > > return "";
> > > > > }
> > > > >
> > > > > +static int __init cf_check parse_wallclock(const char *arg)
> > > > > +{
> > > > > + if ( !arg )
> > > > > + return -EINVAL;
> > > > > +
> > > > > + if ( !strcmp("auto", arg) )
> > > > > + wallclock_source = WALLCLOCK_UNSET;
> > > > > + else if ( !strcmp("xen", arg) )
> > > > > + {
> > > > > + if ( !xen_guest )
> > > > > + return -EINVAL;
> > > > > +
> > > > > + wallclock_source = WALLCLOCK_XEN;
> > > > > + }
> > > > > + else if ( !strcmp("cmos", arg) )
> > > > > + wallclock_source = WALLCLOCK_CMOS;
> > > > > + else if ( !strcmp("efi", arg) )
> > > > > + /*
> > > > > + * Checking if run-time services are available must be done
> > > > > after
> > > > > + * command line parsing.
> > > > > + */
> > > > > + wallclock_source = WALLCLOCK_EFI;
> > > > > + else
> > > > > + return -EINVAL;
> > > > > +
> > > > > + return 0;
> > > > > +}
> > > > > +custom_param("wallclock", parse_wallclock);
> > > > > +
> > > > > static void __init probe_wallclock(void)
> > > > > {
> > > > > ASSERT(wallclock_source == WALLCLOCK_UNSET);
> > > > > @@ -2527,7 +2556,15 @@ int __init init_xen_time(void)
> > > > >
> > > > > open_softirq(TIME_CALIBRATE_SOFTIRQ, local_time_calibration);
> > > > >
> > > > > - probe_wallclock();
> > > > > + /*
> > > > > + * EFI run time services can be disabled from the command line,
> > > > > hence the
> > > > > + * check for them cannot be done as part of the wallclock option
> > > > > parsing.
> > > > > + */
> > > > > + if ( wallclock_source == WALLCLOCK_EFI && !efi_enabled(EFI_RS) )
> > > > > + wallclock_source = WALLCLOCK_UNSET;
> > > > > +
> > > > > + if ( wallclock_source == WALLCLOCK_UNSET )
> > > > > + probe_wallclock();
> > > >
> > > > I don't want to stand in the way, and I can live with this form, so I'd
> > > > like to
> > > > ask that EFI folks or Andrew provide the necessary A-b / R-b. I'd like
> > > > to note
> > > > though that there continue to be quirks here. They may not be affecting
> > > > the
> > > > overall result as long as we have only three possible wallclocks, but
> > > > there
> > > > might be problems if a 4th one appeared.
> > > >
> > > > With the EFI_RS check in the command line handler and assuming the
> > > > default case
> > > > of no "efi=no-rs" on the command line, EFI_RS may still end up being
> > > > off by the
> > > > time the command line is being parsed. With "wallclock=cmos
> > > > wallclock=efi" this
> > > > would result in no probing and "cmos" chosen if there was that check in
> > > > place.
> > > > With the logic as added here there will be probing in that case.
> > > > Replace "cmos"
> > > > by a hypothetical non-default 4th wallclock type (i.e. probing picking
> > > > "cmos"),
> > > > and I expect you can see how the result would then not necessarily be as
> > > > expected.
> > >
> > > My expectation would be that if "wallclock=cmos wallclock=efi" is used
> > > the last option overrides any previous one, and hence if that last
> > > option is not valid the logic will fallback to the default selection
> > > (in this case to probing).
> >
> > That would be my expectation too. If some kind of preference would be
> > expected, it should looks like wallclock=efi,cmos, but I don't think we
> > need that.
> >
> > > Thinking about this, it might make sense to unconditionally set
> > > wallclock_source = WALLCLOCK_UNSET at the start of parse_wallclock()
> > > to avoid previous instances carrying over if later ones are not valid.
> >
> > This may be a good idea. But more importantly, the behavior should be
> > included in the option documentation (that if a selected value is not
> > available, it fallback to auto). And maybe a log message when that
> > happens (but I'm okay with skipping this one, as selected wallclock
> > source is logged already)?
>
> Thanks, would you be fine with:
>
> ### wallclock (x86)
> > `= auto | xen | cmos | efi`
>
> > Default: `auto`
>
> Allow forcing the usage of a specific wallclock source.
>
> * `auto` let the hypervisor select the clocksource based on internal
> heuristics.
>
> * `xen` force usage of the Xen shared_info wallclock when booted as a Xen
> guest. This option is only available if the hypervisor was compiled with
> `CONFIG_XEN_GUEST` enabled.
>
> * `cmos` force usage of the CMOS RTC wallclock.
>
> * `efi` force usage of the EFI_GET_TIME run-time method when booted from EFI
> firmware.
>
> If the selected option is not available Xen will default to `auto`.
Looks good.
--
Best Regards,
Marek Marczykowski-Górecki
Invisible Things Lab
Attachment:
signature.asc
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |