|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v7 1/2] x86/time: introduce command line option to select wallclock
On Fri, Sep 13, 2024 at 09:59:06AM +0200, Roger Pau Monne wrote:
> Allow setting the used wallclock from the command line. When the option is
> set
> to a value different than `auto` the probing is bypassed and the selected
> implementation is used (as long as it's available).
>
> The `xen` and `efi` options require being booted as a Xen guest (with Xen
> guest
> supported built-in) or from UEFI firmware respectively.
>
> Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
Reviewed-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
> ---
> Changes since v6:
> - Clarify documentation regarding repeated using of the wallclock command
> line
> option.
>
> Changes since v5:
> - Do EFI run-time services checking after command line parsing.
>
> Changes since v3:
> - Note xen option is only available if Xen guest support it built.
> - Fix typo.
> ---
> docs/misc/xen-command-line.pandoc | 21 ++++++++++++++++
> xen/arch/x86/time.c | 41 ++++++++++++++++++++++++++++++-
> 2 files changed, 61 insertions(+), 1 deletion(-)
>
> diff --git a/docs/misc/xen-command-line.pandoc
> b/docs/misc/xen-command-line.pandoc
> index 959cf45b55d9..2a9b3b9b8975 100644
> --- a/docs/misc/xen-command-line.pandoc
> +++ b/docs/misc/xen-command-line.pandoc
> @@ -2816,6 +2816,27 @@ vwfi to `native` reduces irq latency significantly. It
> can also lead to
> suboptimal scheduling decisions, but only when the system is
> oversubscribed (i.e., in total there are more vCPUs than pCPUs).
>
> +### 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 invalid or not available Xen will default to
> `auto`.
> +
> ### watchdog (x86)
> > `= force | <boolean>`
>
> diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c
> index 29b026735e5d..e4751684951e 100644
> --- a/xen/arch/x86/time.c
> +++ b/xen/arch/x86/time.c
> @@ -1552,6 +1552,37 @@ static const char *__init
> wallclock_type_to_string(void)
> return "";
> }
>
> +static int __init cf_check parse_wallclock(const char *arg)
> +{
> + wallclock_source = WALLCLOCK_UNSET;
> +
> + if ( !arg )
> + return -EINVAL;
> +
> + if ( !strcmp("auto", arg) )
> + ASSERT(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 +2558,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();
>
> printk(XENLOG_INFO "Wallclock source: %s\n", wallclock_type_to_string());
>
> --
> 2.46.0
>
--
Best Regards,
Marek Marczykowski-Górecki
Invisible Things Lab
Attachment:
signature.asc
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |