From: Michal Privoznik <mprivozn@redhat.com>
QEMU supports this enlightenment since version 2.0. It's required
by some other enlightenments (e.g. hv-stimer, hv-stimer-direct).
>From QEMU docs:
``hv-time``
Enables two Hyper-V-specific clocksources available to the guest: MSR-based
Hyper-V clocksource (HV_X64_MSR_TIME_REF_COUNT, 0x40000020) and Reference TSC
page (enabled via MSR HV_X64_MSR_REFERENCE_TSC, 0x40000021). Both clocksources
are per-guest, Reference TSC page clocksource allows for exit-less time stamp
readings. Using this enlightenment leads to significant speedup of all timestamp
related operations.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---
docs/formatdomain.rst | 2 ++
src/conf/domain_conf.c | 4 ++++
src/conf/domain_conf.h | 1 +
src/conf/schemas/domaincommon.rng | 5 +++++
src/cpu/cpu_x86.c | 5 +++++
src/cpu/cpu_x86_data.h | 1 +
src/libxl/libxl_conf.c | 4 ++++
src/qemu/qemu_command.c | 1 +
src/qemu/qemu_process.c | 1 +
tests/domaincapsdata/qemu_10.0.0-q35.x86_64+amdsev.xml | 1 +
tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml | 1 +
tests/domaincapsdata/qemu_10.0.0-tcg.x86_64+amdsev.xml | 1 +
tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_10.0.0.x86_64+amdsev.xml | 1 +
tests/domaincapsdata/qemu_10.0.0.x86_64.xml | 1 +
tests/domaincapsdata/qemu_10.1.0-q35.x86_64+inteltdx.xml | 1 +
tests/domaincapsdata/qemu_10.1.0-q35.x86_64.xml | 1 +
tests/domaincapsdata/qemu_10.1.0-tcg.x86_64+inteltdx.xml | 1 +
tests/domaincapsdata/qemu_10.1.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_10.1.0.x86_64+inteltdx.xml | 1 +
tests/domaincapsdata/qemu_10.1.0.x86_64.xml | 1 +
tests/domaincapsdata/qemu_10.2.0-q35.x86_64.xml | 1 +
tests/domaincapsdata/qemu_10.2.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_10.2.0.x86_64.xml | 1 +
tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml | 1 +
tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_8.0.0.x86_64.xml | 1 +
tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml | 1 +
tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_8.1.0.x86_64.xml | 1 +
tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml | 1 +
tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_8.2.0.x86_64.xml | 1 +
tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml | 1 +
tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_9.0.0.x86_64.xml | 1 +
tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml | 1 +
tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_9.1.0.x86_64.xml | 1 +
tests/domaincapsdata/qemu_9.2.0-q35.x86_64+amdsev.xml | 1 +
tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml | 1 +
tests/domaincapsdata/qemu_9.2.0-tcg.x86_64+amdsev.xml | 1 +
tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml | 1 +
tests/domaincapsdata/qemu_9.2.0.x86_64+amdsev.xml | 1 +
tests/domaincapsdata/qemu_9.2.0.x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml | 1 +
tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml | 1 +
tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml | 1 +
tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml | 1 +
tests/qemuxmlconfdata/hyperv.x86_64-latest.args | 2 +-
tests/qemuxmlconfdata/hyperv.x86_64-latest.xml | 1 +
tests/qemuxmlconfdata/hyperv.xml | 1 +
60 files changed, 75 insertions(+), 1 deletion(-)
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index f50dce477f..473233c5d1 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -2078,6 +2078,7 @@ Hypervisors may allow certain CPU / machine features to be toggled on/off.
<evmcs state='on'/>
<emsr_bitmap state='on'/>
<xmm_input state='on'/>
+ <time state='on'/>
</hyperv>
<kvm>
<hidden state='on'/>
@@ -2170,6 +2171,7 @@ are:
avic Enable use Hyper-V SynIC with hardware APICv/AVIC on, off :since:`8.10.0 (QEMU 6.2)`
emsr_bitmap Avoid unnecessary updates to L2 MSR Bitmap upon vmexits. on, off :since:`10.7.0 (QEMU 7.1)`
xmm_input Enable XMM Fast Hypercall Input on, off :since:`10.7.0 (QEMU 7.1)`
+ time Enables Hyper-V-specific clocksources on, off :since:`11.9.0 (QEMU 2.0)`
=============== ====================================================================== ============================================ ========================================================================
:since:`Since 8.0.0 (QEMU) Since 11.3.0 (Xen)`, the hypervisor can be
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 99ed633836..1df781545a 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -215,6 +215,7 @@ VIR_ENUM_IMPL(virDomainHyperv,
"avic",
"emsr_bitmap",
"xmm_input",
+ "time",
);
VIR_ENUM_IMPL(virDomainKVM,
@@ -17072,6 +17073,7 @@ virDomainFeaturesHyperVDefParse(virDomainDef *def,
case VIR_DOMAIN_HYPERV_AVIC:
case VIR_DOMAIN_HYPERV_EMSR_BITMAP:
case VIR_DOMAIN_HYPERV_XMM_INPUT:
+ case VIR_DOMAIN_HYPERV_TIME:
break;
case VIR_DOMAIN_HYPERV_TLBFLUSH:
@@ -21648,6 +21650,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDef *src,
case VIR_DOMAIN_HYPERV_AVIC:
case VIR_DOMAIN_HYPERV_EMSR_BITMAP:
case VIR_DOMAIN_HYPERV_XMM_INPUT:
+ case VIR_DOMAIN_HYPERV_TIME:
if (src->hyperv.features[i] != dst->hyperv.features[i]) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("State of HyperV enlightenment feature '%1$s' differs: source: '%2$s', destination: '%3$s'"),
@@ -28626,6 +28629,7 @@ virDomainFeaturesHyperVDefFormat(virBuffer *buf,
case VIR_DOMAIN_HYPERV_AVIC:
case VIR_DOMAIN_HYPERV_EMSR_BITMAP:
case VIR_DOMAIN_HYPERV_XMM_INPUT:
+ case VIR_DOMAIN_HYPERV_TIME:
break;
case VIR_DOMAIN_HYPERV_SPINLOCKS:
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index fe6ea63bd9..d156f11de3 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2262,6 +2262,7 @@ typedef enum {
VIR_DOMAIN_HYPERV_AVIC,
VIR_DOMAIN_HYPERV_EMSR_BITMAP,
VIR_DOMAIN_HYPERV_XMM_INPUT,
+ VIR_DOMAIN_HYPERV_TIME,
VIR_DOMAIN_HYPERV_LAST
} virDomainHyperv;
diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng
index b9230a35b4..0fe9e711eb 100644
--- a/src/conf/schemas/domaincommon.rng
+++ b/src/conf/schemas/domaincommon.rng
@@ -8134,6 +8134,11 @@
<ref name="featurestate"/>
</element>
</optional>
+ <optional>
+ <element name="time">
+ <ref name="featurestate"/>
+ </element>
+ </optional>
</interleave>
</group>
</choice>
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
index 0f7eb8f48b..fa74b46386 100644
--- a/src/cpu/cpu_x86.c
+++ b/src/cpu/cpu_x86.c
@@ -116,6 +116,10 @@ KVM_FEATURE_DEF(VIR_CPU_x86_HV_TLBFLUSH_EXT,
KVM_FEATURE_DEF(VIR_CPU_x86_HV_EMSR_BITMAP,
0x4000000A, 0x00080000, 0x0);
+KVM_FEATURE_DEF(VIR_CPU_x86_HV_TIME,
+ 0x40000003, 0x00000202, 0x0);
+
+
static virCPUx86Feature x86_kvm_features[] =
{
KVM_FEATURE(VIR_CPU_x86_KVM_PV_UNHALT),
@@ -137,6 +141,7 @@ static virCPUx86Feature x86_kvm_features[] =
KVM_FEATURE(VIR_CPU_x86_HV_EMSR_BITMAP),
KVM_FEATURE(VIR_CPU_x86_HV_TLBFLUSH_DIRECT),
KVM_FEATURE(VIR_CPU_x86_HV_TLBFLUSH_EXT),
+ KVM_FEATURE(VIR_CPU_x86_HV_TIME),
};
typedef struct _virCPUx86Signature virCPUx86Signature;
diff --git a/src/cpu/cpu_x86_data.h b/src/cpu/cpu_x86_data.h
index 448acbbeb2..55376e2891 100644
--- a/src/cpu/cpu_x86_data.h
+++ b/src/cpu/cpu_x86_data.h
@@ -66,6 +66,7 @@ struct _virCPUx86MSR {
#define VIR_CPU_x86_HV_EVMCS "hv-evmcs"
#define VIR_CPU_x86_HV_AVIC "hv-avic"
#define VIR_CPU_x86_HV_EMSR_BITMAP "hv-emsr_bitmap"
+#define VIR_CPU_x86_HV_TIME "hv-time"
/* Hyper-V Synthetic Timer option */
#define VIR_CPU_x86_HV_STIMER_DIRECT "hv-stimer-direct"
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index 875e9441a2..83ca803a93 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -647,6 +647,10 @@ libxlMakeDomBuildInfo(virDomainDef *def,
libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
LIBXL_VIRIDIAN_ENLIGHTENMENT_HCALL_IPI);
break;
+ case VIR_DOMAIN_HYPERV_TIME:
+ libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
+ LIBXL_VIRIDIAN_ENLIGHTENMENT_TIME_REF_COUNT);
+ break;
case VIR_DOMAIN_HYPERV_SPINLOCKS:
case VIR_DOMAIN_HYPERV_VENDOR_ID:
VIR_WARN("Hyper-v flag '%s' specified per-domain but is a global Xen setting and will be ignored.",
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index ffe24ae256..7bb56e0b13 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -6492,6 +6492,7 @@ qemuBuildCpuHypervCommandLine(virBuffer *buf,
case VIR_DOMAIN_HYPERV_AVIC:
case VIR_DOMAIN_HYPERV_EMSR_BITMAP:
case VIR_DOMAIN_HYPERV_XMM_INPUT:
+ case VIR_DOMAIN_HYPERV_TIME:
if (def->hyperv.features[i] == VIR_TRISTATE_SWITCH_ON) {
const char *name = virDomainHypervTypeToString(i);
g_autofree char *full_name = g_strdup_printf("hv-%s", name);
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 02a03a7ce2..0a9da32806 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -4490,6 +4490,7 @@ qemuProcessVerifyHypervFeatures(virDomainDef *def,
case VIR_DOMAIN_HYPERV_AVIC:
case VIR_DOMAIN_HYPERV_EMSR_BITMAP:
case VIR_DOMAIN_HYPERV_XMM_INPUT:
+ case VIR_DOMAIN_HYPERV_TIME:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("host doesn't support hyperv '%1$s' feature"),
virDomainHypervTypeToString(i));
diff --git a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64+amdsev.xml b/tests/domaincapsdata/qemu_10.0.0-q35.x86_64+amdsev.xml
index ec2944d380..067043ca0a 100644
--- a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64+amdsev.xml
+++ b/tests/domaincapsdata/qemu_10.0.0-q35.x86_64+amdsev.xml
@@ -860,6 +860,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml
index abe4536c18..ea54c0129c 100644
--- a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml
@@ -1715,6 +1715,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64+amdsev.xml b/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64+amdsev.xml
index 481092d7b1..06f95eeb8c 100644
--- a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64+amdsev.xml
+++ b/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64+amdsev.xml
@@ -1829,6 +1829,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml
index 3bec568edf..947ce507a1 100644
--- a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml
@@ -1823,6 +1823,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_10.0.0.x86_64+amdsev.xml b/tests/domaincapsdata/qemu_10.0.0.x86_64+amdsev.xml
index 818876eb89..f5320b34cb 100644
--- a/tests/domaincapsdata/qemu_10.0.0.x86_64+amdsev.xml
+++ b/tests/domaincapsdata/qemu_10.0.0.x86_64+amdsev.xml
@@ -860,6 +860,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_10.0.0.x86_64.xml b/tests/domaincapsdata/qemu_10.0.0.x86_64.xml
index c9c89b202b..6de4d75bf5 100644
--- a/tests/domaincapsdata/qemu_10.0.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_10.0.0.x86_64.xml
@@ -1715,6 +1715,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_10.1.0-q35.x86_64+inteltdx.xml b/tests/domaincapsdata/qemu_10.1.0-q35.x86_64+inteltdx.xml
index e7b1e4d1ae..a7cf98efe1 100644
--- a/tests/domaincapsdata/qemu_10.1.0-q35.x86_64+inteltdx.xml
+++ b/tests/domaincapsdata/qemu_10.1.0-q35.x86_64+inteltdx.xml
@@ -772,6 +772,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_10.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_10.1.0-q35.x86_64.xml
index 9c832a7bfd..b2b202930b 100644
--- a/tests/domaincapsdata/qemu_10.1.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_10.1.0-q35.x86_64.xml
@@ -1740,6 +1740,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_10.1.0-tcg.x86_64+inteltdx.xml b/tests/domaincapsdata/qemu_10.1.0-tcg.x86_64+inteltdx.xml
index b0eb35c6c8..22dc113f25 100644
--- a/tests/domaincapsdata/qemu_10.1.0-tcg.x86_64+inteltdx.xml
+++ b/tests/domaincapsdata/qemu_10.1.0-tcg.x86_64+inteltdx.xml
@@ -1819,6 +1819,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_10.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_10.1.0-tcg.x86_64.xml
index fb6540b94a..31d8f0e180 100644
--- a/tests/domaincapsdata/qemu_10.1.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_10.1.0-tcg.x86_64.xml
@@ -1820,6 +1820,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_10.1.0.x86_64+inteltdx.xml b/tests/domaincapsdata/qemu_10.1.0.x86_64+inteltdx.xml
index 468dc22ce9..e0e25845ce 100644
--- a/tests/domaincapsdata/qemu_10.1.0.x86_64+inteltdx.xml
+++ b/tests/domaincapsdata/qemu_10.1.0.x86_64+inteltdx.xml
@@ -772,6 +772,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_10.1.0.x86_64.xml b/tests/domaincapsdata/qemu_10.1.0.x86_64.xml
index df171bb5d7..6cb9e85891 100644
--- a/tests/domaincapsdata/qemu_10.1.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_10.1.0.x86_64.xml
@@ -1740,6 +1740,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_10.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_10.2.0-q35.x86_64.xml
index 96b443899a..d5ebd666dd 100644
--- a/tests/domaincapsdata/qemu_10.2.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_10.2.0-q35.x86_64.xml
@@ -993,6 +993,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_10.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_10.2.0-tcg.x86_64.xml
index fb6540b94a..31d8f0e180 100644
--- a/tests/domaincapsdata/qemu_10.2.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_10.2.0-tcg.x86_64.xml
@@ -1820,6 +1820,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_10.2.0.x86_64.xml b/tests/domaincapsdata/qemu_10.2.0.x86_64.xml
index 1deb00fff3..c9e8a75447 100644
--- a/tests/domaincapsdata/qemu_10.2.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_10.2.0.x86_64.xml
@@ -993,6 +993,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml
index 8a5277934d..6b768359d9 100644
--- a/tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml
@@ -1261,6 +1261,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml
index 9348304998..a3b17340f3 100644
--- a/tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml
@@ -1754,6 +1754,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_8.0.0.x86_64.xml b/tests/domaincapsdata/qemu_8.0.0.x86_64.xml
index f68a87f2e0..1713cdd45f 100644
--- a/tests/domaincapsdata/qemu_8.0.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_8.0.0.x86_64.xml
@@ -1261,6 +1261,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml
index a9a113326a..d69b133b85 100644
--- a/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml
@@ -1519,6 +1519,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml
index f1f41fbe96..26035cab3a 100644
--- a/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml
@@ -1775,6 +1775,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_8.1.0.x86_64.xml b/tests/domaincapsdata/qemu_8.1.0.x86_64.xml
index 13541e8421..8bcbdf2b4e 100644
--- a/tests/domaincapsdata/qemu_8.1.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_8.1.0.x86_64.xml
@@ -1519,6 +1519,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml
index dabdf47c6b..dfb7649215 100644
--- a/tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml
@@ -1521,6 +1521,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml
index 7538570678..55bddc1994 100644
--- a/tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml
@@ -1742,6 +1742,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_8.2.0.x86_64.xml b/tests/domaincapsdata/qemu_8.2.0.x86_64.xml
index ffcfc42b08..864191192d 100644
--- a/tests/domaincapsdata/qemu_8.2.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_8.2.0.x86_64.xml
@@ -1521,6 +1521,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml
index 7289d5fbdc..c461130aa8 100644
--- a/tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml
@@ -1521,6 +1521,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml
index 141edc67f3..768f514bbe 100644
--- a/tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml
@@ -1671,6 +1671,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_9.0.0.x86_64.xml b/tests/domaincapsdata/qemu_9.0.0.x86_64.xml
index 5a636f06a8..48718fabe4 100644
--- a/tests/domaincapsdata/qemu_9.0.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_9.0.0.x86_64.xml
@@ -1521,6 +1521,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml
index 4003af73de..9c9cd38985 100644
--- a/tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml
@@ -1657,6 +1657,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml
index 2fdeeb143a..ed80e0de2a 100644
--- a/tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml
@@ -1776,6 +1776,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_9.1.0.x86_64.xml b/tests/domaincapsdata/qemu_9.1.0.x86_64.xml
index ba78d5d24d..533c67076b 100644
--- a/tests/domaincapsdata/qemu_9.1.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_9.1.0.x86_64.xml
@@ -1657,6 +1657,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64+amdsev.xml b/tests/domaincapsdata/qemu_9.2.0-q35.x86_64+amdsev.xml
index 099c503551..fb69eb796e 100644
--- a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64+amdsev.xml
+++ b/tests/domaincapsdata/qemu_9.2.0-q35.x86_64+amdsev.xml
@@ -860,6 +860,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml
index f83af00819..d3bd610a8f 100644
--- a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml
@@ -1715,6 +1715,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64+amdsev.xml b/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64+amdsev.xml
index 28b9647f14..e51ab99b23 100644
--- a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64+amdsev.xml
+++ b/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64+amdsev.xml
@@ -1829,6 +1829,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml
index f3469cdade..4fb4f9857a 100644
--- a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml
@@ -1823,6 +1823,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_9.2.0.x86_64+amdsev.xml b/tests/domaincapsdata/qemu_9.2.0.x86_64+amdsev.xml
index 462365ee12..a365837e99 100644
--- a/tests/domaincapsdata/qemu_9.2.0.x86_64+amdsev.xml
+++ b/tests/domaincapsdata/qemu_9.2.0.x86_64+amdsev.xml
@@ -860,6 +860,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/domaincapsdata/qemu_9.2.0.x86_64.xml b/tests/domaincapsdata/qemu_9.2.0.x86_64.xml
index 756e2cf90a..9e9c278708 100644
--- a/tests/domaincapsdata/qemu_9.2.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_9.2.0.x86_64.xml
@@ -1715,6 +1715,7 @@
<value>avic</value>
<value>emsr_bitmap</value>
<value>xmm_input</value>
+ <value>time</value>
</enum>
<defaults>
<spinlocks>4095</spinlocks>
diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml
index e410e11dbe..3b427d5e1e 100644
--- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml
+++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml
@@ -3374,6 +3374,7 @@
<cap name='avic'/>
<cap name='emsr_bitmap'/>
<cap name='xmm_input'/>
+ <cap name='time'/>
<spinlocks>4095</spinlocks>
<stimer_direct>on</stimer_direct>
<tlbflush_direct>on</tlbflush_direct>
diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml
index 6b50ff6249..685d199b25 100644
--- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml
@@ -4223,6 +4223,7 @@
<cap name='avic'/>
<cap name='emsr_bitmap'/>
<cap name='xmm_input'/>
+ <cap name='time'/>
<spinlocks>4095</spinlocks>
<stimer_direct>on</stimer_direct>
<tlbflush_direct>on</tlbflush_direct>
diff --git a/tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml b/tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml
index 3d5d53d3e7..a17e7ac4b8 100644
--- a/tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml
+++ b/tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml
@@ -3581,6 +3581,7 @@
<cap name='avic'/>
<cap name='emsr_bitmap'/>
<cap name='xmm_input'/>
+ <cap name='time'/>
<spinlocks>4095</spinlocks>
<stimer_direct>on</stimer_direct>
<tlbflush_direct>on</tlbflush_direct>
diff --git a/tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml
index 9628c5c999..7a58fb6633 100644
--- a/tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml
@@ -4899,6 +4899,7 @@
<cap name='avic'/>
<cap name='emsr_bitmap'/>
<cap name='xmm_input'/>
+ <cap name='time'/>
<spinlocks>4095</spinlocks>
<stimer_direct>on</stimer_direct>
<tlbflush_direct>on</tlbflush_direct>
diff --git a/tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml
index 4245fa14de..5502aba78b 100644
--- a/tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml
@@ -3944,6 +3944,7 @@
<cap name='avic'/>
<cap name='emsr_bitmap'/>
<cap name='xmm_input'/>
+ <cap name='time'/>
<spinlocks>4095</spinlocks>
<stimer_direct>on</stimer_direct>
<tlbflush_direct>on</tlbflush_direct>
diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml
index f0053a9742..9793a72670 100644
--- a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml
@@ -3453,6 +3453,7 @@
<cap name='avic'/>
<cap name='emsr_bitmap'/>
<cap name='xmm_input'/>
+ <cap name='time'/>
<spinlocks>4095</spinlocks>
<stimer_direct>on</stimer_direct>
<tlbflush_direct>off</tlbflush_direct>
diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml
index c8782763aa..dd195fcadf 100644
--- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml
@@ -3782,6 +3782,7 @@
<cap name='avic'/>
<cap name='emsr_bitmap'/>
<cap name='xmm_input'/>
+ <cap name='time'/>
<spinlocks>4095</spinlocks>
<stimer_direct>on</stimer_direct>
<tlbflush_direct>on</tlbflush_direct>
diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml
index 21f40b7f5a..bd720eb273 100644
--- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml
@@ -3756,6 +3756,7 @@
<cap name='avic'/>
<cap name='emsr_bitmap'/>
<cap name='xmm_input'/>
+ <cap name='time'/>
<spinlocks>4095</spinlocks>
<stimer_direct>on</stimer_direct>
<tlbflush_direct>on</tlbflush_direct>
diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml
index 5ec8321bf2..f3679f4a99 100644
--- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml
@@ -3692,6 +3692,7 @@
<cap name='avic'/>
<cap name='emsr_bitmap'/>
<cap name='xmm_input'/>
+ <cap name='time'/>
<spinlocks>4095</spinlocks>
<stimer_direct>on</stimer_direct>
<tlbflush_direct>on</tlbflush_direct>
diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml
index 4c0d5a28f9..e7ea9c278e 100644
--- a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml
@@ -3949,6 +3949,7 @@
<cap name='avic'/>
<cap name='emsr_bitmap'/>
<cap name='xmm_input'/>
+ <cap name='time'/>
<spinlocks>4095</spinlocks>
<stimer_direct>on</stimer_direct>
<tlbflush_direct>on</tlbflush_direct>
diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml
index 6caddd450f..9b38dea8f5 100644
--- a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml
+++ b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml
@@ -3123,6 +3123,7 @@
<cap name='avic'/>
<cap name='emsr_bitmap'/>
<cap name='xmm_input'/>
+ <cap name='time'/>
<spinlocks>4095</spinlocks>
<stimer_direct>on</stimer_direct>
<tlbflush_direct>on</tlbflush_direct>
diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml
index 665b82560c..cc099fff40 100644
--- a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml
@@ -3930,6 +3930,7 @@
<cap name='avic'/>
<cap name='emsr_bitmap'/>
<cap name='xmm_input'/>
+ <cap name='time'/>
<spinlocks>4095</spinlocks>
<stimer_direct>on</stimer_direct>
<tlbflush_direct>on</tlbflush_direct>
diff --git a/tests/qemuxmlconfdata/hyperv.x86_64-latest.args b/tests/qemuxmlconfdata/hyperv.x86_64-latest.args
index 5a32b80e71..d952b045c1 100644
--- a/tests/qemuxmlconfdata/hyperv.x86_64-latest.args
+++ b/tests/qemuxmlconfdata/hyperv.x86_64-latest.args
@@ -12,7 +12,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \
-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=on \
-accel tcg \
--cpu 'qemu64,hv-relaxed=on,hv-vapic=on,hv-spinlocks=0x2fff,hv-vpindex=on,hv-runtime=on,hv-synic=on,hv-stimer=on,hv-reset=on,hv-vendor-id=KVM Hv,hv-frequencies=on,hv-reenlightenment=on,hv-tlbflush=on,hv-tlbflush-direct=on,hv-tlbflush-ext=on,hv-ipi=on,hv-evmcs=on,hv-avic=on,hv-emsr-bitmap=on,hv-xmm-input=on' \
+-cpu 'qemu64,hv-relaxed=on,hv-vapic=on,hv-spinlocks=0x2fff,hv-vpindex=on,hv-runtime=on,hv-synic=on,hv-stimer=on,hv-reset=on,hv-vendor-id=KVM Hv,hv-frequencies=on,hv-reenlightenment=on,hv-tlbflush=on,hv-tlbflush-direct=on,hv-tlbflush-ext=on,hv-ipi=on,hv-evmcs=on,hv-avic=on,hv-emsr-bitmap=on,hv-xmm-input=on,hv-time=on' \
-m size=219136k \
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
-overcommit mem-lock=off \
diff --git a/tests/qemuxmlconfdata/hyperv.x86_64-latest.xml b/tests/qemuxmlconfdata/hyperv.x86_64-latest.xml
index 49537188af..8c5af681c6 100644
--- a/tests/qemuxmlconfdata/hyperv.x86_64-latest.xml
+++ b/tests/qemuxmlconfdata/hyperv.x86_64-latest.xml
@@ -31,6 +31,7 @@
<avic state='on'/>
<emsr_bitmap state='on'/>
<xmm_input state='on'/>
+ <time state='on'/>
</hyperv>
</features>
<cpu mode='custom' match='exact' check='none'>
diff --git a/tests/qemuxmlconfdata/hyperv.xml b/tests/qemuxmlconfdata/hyperv.xml
index 8c323f6578..8cd83da4ec 100644
--- a/tests/qemuxmlconfdata/hyperv.xml
+++ b/tests/qemuxmlconfdata/hyperv.xml
@@ -31,6 +31,7 @@
<avic state='on'/>
<emsr_bitmap state='on'/>
<xmm_input state='on'/>
+ <time state='on'/>
</hyperv>
</features>
<clock offset='utc'/>
--
2.49.1
On Mon, Oct 06, 2025 at 03:14:46PM +0200, Michal Privoznik via Devel wrote: > From: Michal Privoznik <mprivozn@redhat.com> > > QEMU supports this enlightenment since version 2.0. It's required > by some other enlightenments (e.g. hv-stimer, hv-stimer-direct). > >From QEMU docs: > > ``hv-time`` > Enables two Hyper-V-specific clocksources available to the guest: MSR-based > Hyper-V clocksource (HV_X64_MSR_TIME_REF_COUNT, 0x40000020) and Reference TSC > page (enabled via MSR HV_X64_MSR_REFERENCE_TSC, 0x40000021). Both clocksources > are per-guest, Reference TSC page clocksource allows for exit-less time stamp > readings. Using this enlightenment leads to significant speedup of all timestamp > related operations. We already support this feature but not via hyper-v specific element, it's hidden in timers <https://libvirt.org/formatdomain.html#time-keeping> by using `hypervclock` timer. See VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK in libvirt code. If we want to introduce it in hyper-v features as well we need to make sure these two places in XML reflect the correct state. It also seems that our timer documentation is wrong as it states that the `hypervclock` timer is available since QEMU 1.2.2 . Pavel
On 10/6/25 16:41, Pavel Hrdina wrote: > On Mon, Oct 06, 2025 at 03:14:46PM +0200, Michal Privoznik via Devel wrote: >> From: Michal Privoznik <mprivozn@redhat.com> >> >> QEMU supports this enlightenment since version 2.0. It's required >> by some other enlightenments (e.g. hv-stimer, hv-stimer-direct). >> >From QEMU docs: >> >> ``hv-time`` >> Enables two Hyper-V-specific clocksources available to the guest: MSR-based >> Hyper-V clocksource (HV_X64_MSR_TIME_REF_COUNT, 0x40000020) and Reference TSC >> page (enabled via MSR HV_X64_MSR_REFERENCE_TSC, 0x40000021). Both clocksources >> are per-guest, Reference TSC page clocksource allows for exit-less time stamp >> readings. Using this enlightenment leads to significant speedup of all timestamp >> related operations. > > We already support this feature but not via hyper-v specific element, > it's hidden in timers <https://libvirt.org/formatdomain.html#time-keeping> > by using `hypervclock` timer. > > See VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK in libvirt code. If we want to > introduce it in hyper-v features as well we need to make sure these two > places in XML reflect the correct state. > > It also seems that our timer documentation is wrong as it states that > the `hypervclock` timer is available since QEMU 1.2.2 . > > Pavel Ah, very good catch! Let's keep it under timers and fix our docs. I'll post v2 soon. Michal
© 2016 - 2025 Red Hat, Inc.