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] [XEN] Make per-cpu time information expli

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [XEN] Make per-cpu time information explicitly PER_CPU.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 08 Aug 2006 14:50:31 +0000
Delivery-date: Tue, 08 Aug 2006 07:55:17 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
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/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/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 kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 0caf8d9218cca1090f8463ac095ad9eb55becdb2
# Parent  5e8c254c9dcd5ef3b94902bdce8c00015faa24e4
[XEN] Make per-cpu time information explicitly PER_CPU.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 xen/arch/x86/time.c |   60 ++++++++++++++++++++++++++--------------------------
 1 files changed, 30 insertions(+), 30 deletions(-)

diff -r 5e8c254c9dcd -r 0caf8d9218cc xen/arch/x86/time.c
--- a/xen/arch/x86/time.c       Tue Aug 08 13:55:22 2006 +0100
+++ b/xen/arch/x86/time.c       Tue Aug 08 14:02:14 2006 +0100
@@ -58,7 +58,7 @@ struct cpu_time {
     struct timer calibration_timer;
 } __cacheline_aligned;
 
-static struct cpu_time cpu_time[NR_CPUS];
+static DEFINE_PER_CPU(struct cpu_time, cpu_time);
 
 /*
  * Protected by platform_timer_lock, which must be acquired with interrupts
@@ -263,7 +263,7 @@ void calibrate_tsc_ap(void)
     rdtscll(t2);
 
     ticks_per_sec = (t2 - t1) * (u64)CALIBRATE_FRAC;
-    set_time_scale(&cpu_time[smp_processor_id()].tsc_scale, ticks_per_sec);
+    set_time_scale(&this_cpu(cpu_time).tsc_scale, ticks_per_sec);
 
     atomic_dec(&tsc_calibrate_gang);
 }
@@ -646,7 +646,7 @@ static unsigned long get_cmos_time(void)
 
 s_time_t get_s_time(void)
 {
-    struct cpu_time *t = &cpu_time[smp_processor_id()];
+    struct cpu_time *t = &this_cpu(cpu_time);
     u64 tsc, delta;
     s_time_t now;
 
@@ -675,7 +675,7 @@ static inline void __update_vcpu_system_
     struct cpu_time       *t;
     struct vcpu_time_info *u;
 
-    t = &cpu_time[smp_processor_id()];
+    t = &this_cpu(cpu_time);
     u = &v->domain->shared_info->vcpu_info[v->vcpu_id].time;
 
     version_update_begin(&u->version);
@@ -691,7 +691,7 @@ void update_vcpu_system_time(struct vcpu
 void update_vcpu_system_time(struct vcpu *v)
 {
     if ( v->domain->shared_info->vcpu_info[v->vcpu_id].time.tsc_timestamp != 
-         cpu_time[smp_processor_id()].local_tsc_stamp )
+         this_cpu(cpu_time).local_tsc_stamp )
         __update_vcpu_system_time(v);
 }
 
@@ -728,7 +728,7 @@ void do_settime(unsigned long secs, unsi
 
 static void local_time_calibration(void *unused)
 {
-    unsigned int cpu = smp_processor_id();
+    struct cpu_time *t = &this_cpu(cpu_time);
 
     /*
      * System timestamps, extrapolated from local and master oscillators,
@@ -759,9 +759,9 @@ static void local_time_calibration(void 
     /* The overall calibration scale multiplier. */
     u32 calibration_mul_frac;
 
-    prev_tsc          = cpu_time[cpu].local_tsc_stamp;
-    prev_local_stime  = cpu_time[cpu].stime_local_stamp;
-    prev_master_stime = cpu_time[cpu].stime_master_stamp;
+    prev_tsc          = t->local_tsc_stamp;
+    prev_local_stime  = t->stime_local_stamp;
+    prev_master_stime = t->stime_master_stamp;
 
     /* Disable IRQs to get 'instantaneous' current timestamps. */
     local_irq_disable();
@@ -772,9 +772,9 @@ static void local_time_calibration(void 
 
 #if 0
     printk("PRE%d: tsc=%lld stime=%lld master=%lld\n",
-           cpu, prev_tsc, prev_local_stime, prev_master_stime);
+           smp_processor_id(), prev_tsc, prev_local_stime, prev_master_stime);
     printk("CUR%d: tsc=%lld stime=%lld master=%lld -> %lld\n",
-           cpu, curr_tsc, curr_local_stime, curr_master_stime,
+           smp_processor_id(), curr_tsc, curr_local_stime, curr_master_stime,
            curr_master_stime - curr_local_stime);
 #endif
 
@@ -844,41 +844,41 @@ static void local_time_calibration(void 
         calibration_mul_frac = mul_frac(calibration_mul_frac, error_factor);
 
 #if 0
-    printk("---%d: %08x %08x %d\n", cpu,
+    printk("---%d: %08x %08x %d\n", smp_processor_id(),
            error_factor, calibration_mul_frac, tsc_shift);
 #endif
 
     /* Record new timestamp information. */
-    cpu_time[cpu].tsc_scale.mul_frac = calibration_mul_frac;
-    cpu_time[cpu].tsc_scale.shift    = tsc_shift;
-    cpu_time[cpu].local_tsc_stamp    = curr_tsc;
-    cpu_time[cpu].stime_local_stamp  = curr_local_stime;
-    cpu_time[cpu].stime_master_stamp = curr_master_stime;
+    t->tsc_scale.mul_frac = calibration_mul_frac;
+    t->tsc_scale.shift    = tsc_shift;
+    t->local_tsc_stamp    = curr_tsc;
+    t->stime_local_stamp  = curr_local_stime;
+    t->stime_master_stamp = curr_master_stime;
 
  out:
-    set_timer(&cpu_time[cpu].calibration_timer, NOW() + EPOCH);
-
-    if ( cpu == 0 )
+    set_timer(&t->calibration_timer, NOW() + EPOCH);
+
+    if ( smp_processor_id() == 0 )
         platform_time_calibration();
 }
 
 void init_percpu_time(void)
 {
-    unsigned int cpu = smp_processor_id();
+    struct cpu_time *t = &this_cpu(cpu_time);
     unsigned long flags;
     s_time_t now;
 
     local_irq_save(flags);
-    rdtscll(cpu_time[cpu].local_tsc_stamp);
-    now = (cpu == 0) ? 0 : read_platform_stime();
+    rdtscll(t->local_tsc_stamp);
+    now = (smp_processor_id() == 0) ? 0 : read_platform_stime();
     local_irq_restore(flags);
 
-    cpu_time[cpu].stime_master_stamp = now;
-    cpu_time[cpu].stime_local_stamp  = now;
-
-    init_timer(&cpu_time[cpu].calibration_timer,
-                  local_time_calibration, NULL, cpu);
-    set_timer(&cpu_time[cpu].calibration_timer, NOW() + EPOCH);
+    t->stime_master_stamp = now;
+    t->stime_local_stamp  = now;
+
+    init_timer(&t->calibration_timer, local_time_calibration,
+               NULL, smp_processor_id());
+    set_timer(&t->calibration_timer, NOW() + EPOCH);
 }
 
 /* Late init function (after all CPUs are booted). */
@@ -904,7 +904,7 @@ void __init early_time_init(void)
 {
     u64 tmp = calibrate_boot_tsc();
 
-    set_time_scale(&cpu_time[0].tsc_scale, tmp);
+    set_time_scale(&per_cpu(cpu_time, 0).tsc_scale, tmp);
 
     do_div(tmp, 1000);
     cpu_khz = (unsigned long)tmp;

_______________________________________________
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] [XEN] Make per-cpu time information explicitly PER_CPU., Xen patchbot-unstable <=