From 0aa64f1929a0407c71d0ff948524ac038646240a Mon Sep 17 00:00:00 2001 From: Ross Lagerwall Date: Fri, 11 Sep 2026 10:12:44 +0100 Subject: [PATCH] tools/libxl: Add support for Viridian stimer direct mode Add support to libxl for using the stimer enlightenments in direct mode. Signed-off-by: Ross Lagerwall Acked-by: Anthony PERARD --- docs/man/xl.cfg.5.pod.in | 5 +++++ tools/golang/xenlight/types.gen.go | 1 + tools/include/libxl.h | 6 ++++++ tools/libs/light/libxl_types.idl | 1 + tools/libs/light/libxl_x86.c | 5 +++++ 5 files changed, 18 insertions(+) diff --git a/docs/man/xl.cfg.5.pod.in b/docs/man/xl.cfg.5.pod.in index d34951edb9..30c401588f 100644 --- a/docs/man/xl.cfg.5.pod.in +++ b/docs/man/xl.cfg.5.pod.in @@ -2496,6 +2496,11 @@ ticks and hence enabling this group will ensure that ticks will be consistent with use of an enlightened time source (B or B). +=item B + +This set is the same as the B set but additionally supports +using synthetic timers in direct mode. + =item B This set incorporates use of a hypercall for interprocessor interrupts. diff --git a/tools/golang/xenlight/types.gen.go b/tools/golang/xenlight/types.gen.go index 897100d9b6..3d3bcc1382 100644 --- a/tools/golang/xenlight/types.gen.go +++ b/tools/golang/xenlight/types.gen.go @@ -234,6 +234,7 @@ ViridianEnlightenmentHcallIpi ViridianEnlightenment = 9 ViridianEnlightenmentExProcessorMasks ViridianEnlightenment = 10 ViridianEnlightenmentNoVpLimit ViridianEnlightenment = 11 ViridianEnlightenmentCpuHotplug ViridianEnlightenment = 12 +ViridianEnlightenmentStimerDirect ViridianEnlightenment = 13 ) type Hdtype int diff --git a/tools/include/libxl.h b/tools/include/libxl.h index 617ce973b2..d294fb36bd 100644 --- a/tools/include/libxl.h +++ b/tools/include/libxl.h @@ -389,6 +389,12 @@ */ #define LIBXL_HAVE_VIRIDIAN_HCALL_IPI 1 +/* + * LIBXL_HAVE_VIRIDIAN_STIMER_DIRECT indicates that the 'stimer_direct' value + * is present in the viridian enlightenment enumeration. + */ +#define LIBXL_HAVE_VIRIDIAN_STIMER_DIRECT 1 + /* * LIBXL_HAVE_BUILDINFO_HVM_ACPI_LAPTOP_SLATE indicates that * libxl_domain_build_info has the u.hvm.acpi_laptop_slate field. diff --git a/tools/libs/light/libxl_types.idl b/tools/libs/light/libxl_types.idl index d3121ea277..27755801d1 100644 --- a/tools/libs/light/libxl_types.idl +++ b/tools/libs/light/libxl_types.idl @@ -260,6 +260,7 @@ libxl_viridian_enlightenment = Enumeration("viridian_enlightenment", [ (10, "ex_processor_masks"), (11, "no_vp_limit"), (12, "cpu_hotplug"), + (13, "stimer_direct"), ]) libxl_hdtype = Enumeration("hdtype", [ diff --git a/tools/libs/light/libxl_x86.c b/tools/libs/light/libxl_x86.c index 60d4e8661c..9e8b48372d 100644 --- a/tools/libs/light/libxl_x86.c +++ b/tools/libs/light/libxl_x86.c @@ -389,6 +389,11 @@ static int hvm_set_viridian_features(libxl__gc *gc, uint32_t domid, if (libxl_bitmap_test(&enlightenments, LIBXL_VIRIDIAN_ENLIGHTENMENT_CPU_HOTPLUG)) mask |= HVMPV_cpu_hotplug; + if (libxl_bitmap_test(&enlightenments, + LIBXL_VIRIDIAN_ENLIGHTENMENT_STIMER_DIRECT)) + mask |= HVMPV_time_ref_count | HVMPV_synic | HVMPV_stimer | + HVMPV_stimer_direct; + if (mask != 0 && xc_hvm_param_set(CTX->xch, domid,