|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] x86/time: introduce command line option to select wallclock
commit 7eba2f46a14fac55cff8a1a8e23dfcca75593930
Author: Roger Pau Monne <roger.pau@xxxxxxxxxx>
AuthorDate: Mon Sep 2 17:51:33 2024 +0200
Commit: Roger Pau Monne <roger.pau@xxxxxxxxxx>
CommitDate: Thu Jan 16 09:03:17 2025 +0100
x86/time: introduce command line option to select wallclock
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>
Release-Acked-by: Oleksii Kurochko<oleksii.kurochko@xxxxxxxxx>
---
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 08b0053f9c..9bbd00baef 100644
--- a/docs/misc/xen-command-line.pandoc
+++ b/docs/misc/xen-command-line.pandoc
@@ -2887,6 +2887,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 a9aa335d7c..00545c45fd 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());
--
generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |