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-devel

[Xen-devel] [PATCH] minor cleanup of code that writes to TSC

To: "Xen-Devel (E-mail)" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH] minor cleanup of code that writes to TSC
From: Dan Magenheimer <dan.magenheimer@xxxxxxxxxx>
Date: Mon, 21 Sep 2009 10:09:44 -0700 (PDT)
Delivery-date: Mon, 21 Sep 2009 10:10:14 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
While working on TSC-handling code, I missed an important
piece of code that writes to TSC because it does it
differently than other pieces of code.  Fix that,
and also cleanup a bit to avoid hardcoded constants
and use wrmsrl instead of wrmsr plus handwritten 64-bit
dismembering code.

Signed-off-by: Dan Magenheimer <dan.magenheimer@xxxxxxxxxx>

diff -r 72d130772f36 xen/arch/x86/smpboot.c
--- a/xen/arch/x86/smpboot.c    Wed Sep 16 09:30:41 2009 +0100
+++ b/xen/arch/x86/smpboot.c    Mon Sep 21 11:03:24 2009 -0600
@@ -223,7 +223,7 @@ static void __init synchronize_tsc_bp (v
                 * We clear the TSC in the last loop:
                 */
                if (i == NR_LOOPS-1)
-                       write_tsc(0, 0);
+                       write_tsc(0L);
 
                /*
                 * Wait for all APs to leave the synchronization point:
@@ -293,7 +293,7 @@ static void __init synchronize_tsc_ap (v
 
                rdtscll(tsc_values[smp_processor_id()]);
                if (i == NR_LOOPS-1)
-                       write_tsc(0, 0);
+                       write_tsc(0L);
 
                atomic_inc(&tsc_count_stop);
                while (atomic_read(&tsc_count_stop) != num_booting_cpus()) mb();
diff -r 72d130772f36 xen/arch/x86/time.c
--- a/xen/arch/x86/time.c       Wed Sep 16 09:30:41 2009 +0100
+++ b/xen/arch/x86/time.c       Mon Sep 21 11:03:24 2009 -0600
@@ -699,7 +699,7 @@ void cstate_restore_tsc(void)
     struct cpu_time *t = &this_cpu(cpu_time);
     struct time_scale sys_to_tsc = scale_reciprocal(t->tsc_scale);
     s_time_t stime_delta;
-    u64 tsc_delta;
+    u64 new_tsc;
 
     if ( boot_cpu_has(X86_FEATURE_NOSTOP_TSC) )
         return;
@@ -708,9 +708,9 @@ void cstate_restore_tsc(void)
     if ( stime_delta < 0 )
         stime_delta = 0;
 
-    tsc_delta = scale_delta(stime_delta, &sys_to_tsc);
+    new_tsc = t->local_tsc_stamp + scale_delta(stime_delta, &sys_to_tsc);
 
-    wrmsrl(MSR_IA32_TSC, t->local_tsc_stamp + tsc_delta);
+    write_tsc(new_tsc);
 }
 
 /***************************************************************************
@@ -1126,8 +1126,7 @@ static void time_calibration_tsc_rendezv
             atomic_inc(&r->semaphore);
 
             if ( i == 0 )
-                write_tsc((u32)r->master_tsc_stamp,
-                          (u32)(r->master_tsc_stamp >> 32));
+                write_tsc(r->master_tsc_stamp);
 
             while ( atomic_read(&r->semaphore) != (2*total_cpus - 1) )
                 mb();
@@ -1140,8 +1139,7 @@ static void time_calibration_tsc_rendezv
                 mb();
 
             if ( i == 0 )
-                write_tsc((u32)r->master_tsc_stamp,
-                          (u32)(r->master_tsc_stamp >> 32));
+                write_tsc(r->master_tsc_stamp);
 
             atomic_inc(&r->semaphore);
             while ( atomic_read(&r->semaphore) > total_cpus )
diff -r 72d130772f36 xen/include/asm-x86/msr.h
--- a/xen/include/asm-x86/msr.h Wed Sep 16 09:30:41 2009 +0100
+++ b/xen/include/asm-x86/msr.h Mon Sep 21 11:03:24 2009 -0600
@@ -82,7 +82,7 @@ static inline void wrmsrl(unsigned int m
 } while(0)
 #endif
 
-#define write_tsc(val1,val2) wrmsr(0x10, val1, val2)
+#define write_tsc(val) wrmsrl(MSR_IA32_TSC, val)
 
 #define rdpmc(counter,low,high) \
      __asm__ __volatile__("rdpmc" \

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH] minor cleanup of code that writes to TSC, Dan Magenheimer <=