Patchwork [3.5.y.z,extended,stable] Patch "x86: Hyper-V: register clocksource only if its advertised" has been added to staging queue

mail settings
Submitter Luis Henriques
Date Feb. 26, 2013, 4:14 p.m.
Message ID <>
Download mbox | patch
Permalink /patch/223309/
State New
Headers show


Luis Henriques - Feb. 26, 2013, 4:14 p.m.
This is a note to let you know that I have just added a patch titled

    x86: Hyper-V: register clocksource only if its advertised

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see



From d47ff465029722968fc2a272df553bda9a83a795 Mon Sep 17 00:00:00 2001
From: Olaf Hering <[]>
Date: Sun, 3 Feb 2013 17:22:37 -0800
Subject: [PATCH] x86: Hyper-V: register clocksource only if its advertised

commit 32068f6527b8f1822a30671dedaf59c567325026 upstream.

Enable hyperv_clocksource only if its advertised as a feature.
XenServer 6 returns the signature which is checked in
ms_hyperv_platform(), but it does not offer all features. Currently the
clocksource is enabled unconditionally in ms_hyperv_init_platform(), and
the result is a hanging guest.

Hyper-V spec Bit 1 indicates the availability of Partition Reference
Counter.  Register the clocksource only if this bit is set.

The guest in question prints this in dmesg:
 [    0.000000] Hypervisor detected: Microsoft HyperV
 [    0.000000] HyperV: features 0x70, hints 0x0

This bug can be reproduced easily be setting 'viridian=1' in a HVM domU
.cfg file. A workaround without this patch is to boot the HVM guest with

Signed-off-by: Olaf Hering <>
Signed-off-by: K. Y. Srinivasan <>
Cc: Greg KH <>
Signed-off-by: H. Peter Anvin <>
Signed-off-by: Luis Henriques <>
 arch/x86/kernel/cpu/mshyperv.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)



diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
index 0a630dd..646d192 100644
--- a/arch/x86/kernel/cpu/mshyperv.c
+++ b/arch/x86/kernel/cpu/mshyperv.c
@@ -68,7 +68,8 @@  static void __init ms_hyperv_init_platform(void)
 	printk(KERN_INFO "HyperV: features 0x%x, hints 0x%x\n",
 	       ms_hyperv.features, ms_hyperv.hints);

-	clocksource_register_hz(&hyperv_cs, NSEC_PER_SEC/100);
+	if (ms_hyperv.features & HV_X64_MSR_TIME_REF_COUNT_AVAILABLE)
+		clocksource_register_hz(&hyperv_cs, NSEC_PER_SEC/100);

 const __refconst struct hypervisor_x86 x86_hyper_ms_hyperv = {