WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] x86: Warn on CPU hot-add to tsc-reliable

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] x86: Warn on CPU hot-add to tsc-reliable system
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Sat, 29 May 2010 00:30:28 -0700
Delivery-date: Sat, 29 May 2010 00:33:12 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1275030182 -3600
# Node ID 500354a67a73b238c15dee313c31a1706bc4a116
# Parent  26c2922da53cb2b36ef9484bbd6d74ea74b1c354
x86: Warn on CPU hot-add to tsc-reliable system

...and provide a boot option to indicate TSCs may be skewed.

Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/arch/x86/setup.c   |   12 ------------
 xen/arch/x86/smpboot.c |   12 +++++++++++-
 xen/arch/x86/time.c    |   21 ++++++++++++++++++++-
 3 files changed, 31 insertions(+), 14 deletions(-)

diff -r 26c2922da53c -r 500354a67a73 xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c      Thu May 27 09:39:47 2010 +0100
+++ b/xen/arch/x86/setup.c      Fri May 28 08:03:02 2010 +0100
@@ -69,10 +69,6 @@ static int __initdata opt_watchdog = 0;
 static int __initdata opt_watchdog = 0;
 boolean_param("watchdog", opt_watchdog);
 
-/* opt_tsc_unstable: Override all tests; assume TSC is unreliable. */
-static int opt_tsc_unstable;
-boolean_param("tsc_unstable", opt_tsc_unstable);
-
 /* **** Linux config option: propagated to domain0. */
 /* "acpi=off":    Sisables both ACPI table parsing and interpreter. */
 /* "acpi=force":  Override the disable blacklist.                   */
@@ -415,14 +411,6 @@ void __init __start_xen(unsigned long mb
         while ( kextra[1] == ' ' ) kextra++;
     }
     cmdline_parse(cmdline);
-
-    /* If TSC is marked as unstable, clear all enhanced TSC features. */
-    if ( opt_tsc_unstable )
-    {
-        setup_clear_cpu_cap(X86_FEATURE_CONSTANT_TSC);
-        setup_clear_cpu_cap(X86_FEATURE_NONSTOP_TSC);
-        setup_clear_cpu_cap(X86_FEATURE_TSC_RELIABLE);
-    }
 
     parse_video_info();
 
diff -r 26c2922da53c -r 500354a67a73 xen/arch/x86/smpboot.c
--- a/xen/arch/x86/smpboot.c    Thu May 27 09:39:47 2010 +0100
+++ b/xen/arch/x86/smpboot.c    Fri May 28 08:03:02 2010 +0100
@@ -923,7 +923,17 @@ int cpu_add(uint32_t apic_id, uint32_t a
     }
 
     /* Physically added CPUs do not have synchronised TSC. */
-    cpu_set(cpu, tsc_sync_cpu_mask);
+    if ( boot_cpu_has(X86_FEATURE_TSC_RELIABLE) )
+    {
+        static bool_t once_only;
+        if ( !test_and_set_bool(once_only) )
+            printk(XENLOG_WARNING
+                   " ** New physical CPU %u may have skewed TSC and hence "
+                   "break assumed cross-CPU TSC coherency.\n"
+                   " ** Consider using boot parameter \"tsc=skewed\" "
+                   "which forces TSC emulation where appropriate.\n", cpu);
+        cpu_set(cpu, tsc_sync_cpu_mask);
+    }
 
     srat_detect_node(cpu);
     numa_add_cpu(cpu);
diff -r 26c2922da53c -r 500354a67a73 xen/arch/x86/time.c
--- a/xen/arch/x86/time.c       Thu May 27 09:39:47 2010 +0100
+++ b/xen/arch/x86/time.c       Fri May 28 08:03:02 2010 +0100
@@ -1598,6 +1598,25 @@ struct tm wallclock_time(void)
  * PV SoftTSC Emulation.
  */
 
+/*
+ * tsc=unstable: Override all tests; assume TSC is unreliable.
+ * tsc=skewed: Assume TSCs are individually reliable, but skewed across CPUs.
+ */
+static void __init tsc_parse(const char *s)
+{
+    if ( !strcmp(s, "unstable") )
+    {
+        setup_clear_cpu_cap(X86_FEATURE_CONSTANT_TSC);
+        setup_clear_cpu_cap(X86_FEATURE_NONSTOP_TSC);
+        setup_clear_cpu_cap(X86_FEATURE_TSC_RELIABLE);
+    }
+    else if ( !strcmp(s, "skewed") )
+    {
+        setup_clear_cpu_cap(X86_FEATURE_TSC_RELIABLE);
+    }
+}
+custom_param("tsc", tsc_parse);
+
 u64 gtime_to_gtsc(struct domain *d, u64 tsc)
 {
     if ( !is_hvm_domain(d) )
@@ -1636,7 +1655,7 @@ void pv_soft_rdtsc(struct vcpu *v, struc
 
 int host_tsc_is_safe(void)
 {
-    return boot_cpu_has(X86_FEATURE_TSC_RELIABLE) || (num_online_cpus() == 1);
+    return boot_cpu_has(X86_FEATURE_TSC_RELIABLE);
 }
 
 void cpuid_time_leaf(uint32_t sub_idx, uint32_t *eax, uint32_t *ebx,

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] x86: Warn on CPU hot-add to tsc-reliable system, Xen patchbot-unstable <=