# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID aa25666d464332f52302f8f0d0768da9729befa6
# Parent 5fc926b5860901cac5dd4b3084e8a23e0c366066
[XEN] Make tracing structures and buffers explicitly PER_CPU.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
xen/arch/x86/hvm/vmx/vmx.c | 14 +++++++-------
xen/common/trace.c | 17 +++++++++--------
2 files changed, 16 insertions(+), 15 deletions(-)
diff -r 5fc926b58609 -r aa25666d4643 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c Tue Aug 08 14:48:43 2006 +0100
+++ b/xen/arch/x86/hvm/vmx/vmx.c Tue Aug 08 14:56:22 2006 +0100
@@ -49,8 +49,8 @@
#include <asm/hvm/vpic.h>
#include <asm/hvm/vlapic.h>
-static unsigned long trace_values[NR_CPUS][5];
-#define TRACE_VMEXIT(index,value) trace_values[smp_processor_id()][index]=value
+static DEFINE_PER_CPU(unsigned long, trace_values[5]);
+#define TRACE_VMEXIT(index,value) this_cpu(trace_values)[index]=value
static void vmx_ctxt_switch_from(struct vcpu *v);
static void vmx_ctxt_switch_to(struct vcpu *v);
@@ -2400,11 +2400,11 @@ asmlinkage void vmx_trace_vmentry (void)
asmlinkage void vmx_trace_vmentry (void)
{
TRACE_5D(TRC_VMX_VMENTRY,
- trace_values[smp_processor_id()][0],
- trace_values[smp_processor_id()][1],
- trace_values[smp_processor_id()][2],
- trace_values[smp_processor_id()][3],
- trace_values[smp_processor_id()][4]);
+ this_cpu(trace_values)[0],
+ this_cpu(trace_values)[1],
+ this_cpu(trace_values)[2],
+ this_cpu(trace_values)[3],
+ this_cpu(trace_values)[4]);
TRACE_VMEXIT(0,9);
TRACE_VMEXIT(1,9);
TRACE_VMEXIT(2,9);
diff -r 5fc926b58609 -r aa25666d4643 xen/common/trace.c
--- a/xen/common/trace.c Tue Aug 08 14:48:43 2006 +0100
+++ b/xen/common/trace.c Tue Aug 08 14:56:22 2006 +0100
@@ -39,8 +39,8 @@ integer_param("tbuf_size", opt_tbuf_size
integer_param("tbuf_size", opt_tbuf_size);
/* Pointers to the meta-data objects for all system trace buffers */
-static struct t_buf *t_bufs[NR_CPUS];
-static struct t_rec *t_recs[NR_CPUS];
+static DEFINE_PER_CPU(struct t_buf *, t_bufs);
+static DEFINE_PER_CPU(struct t_rec *, t_recs);
static int nr_recs;
/* High water mark for trace buffers; */
@@ -105,9 +105,10 @@ static int alloc_trace_bufs(void)
for_each_online_cpu ( i )
{
- buf = t_bufs[i] = (struct t_buf *)&rawbuf[i*opt_tbuf_size*PAGE_SIZE];
+ buf = per_cpu(t_bufs, i) = (struct t_buf *)
+ &rawbuf[i*opt_tbuf_size*PAGE_SIZE];
buf->cons = buf->prod = 0;
- t_recs[i] = (struct t_rec *)(buf + 1);
+ per_cpu(t_recs, i) = (struct t_rec *)(buf + 1);
}
t_buf_highwater = nr_recs >> 1; /* 50% high water */
@@ -186,7 +187,7 @@ int tb_control(dom0_tbufcontrol_t *tbc)
case DOM0_TBUF_GET_INFO:
tbc->cpu_mask = tb_cpu_mask;
tbc->evt_mask = tb_event_mask;
- tbc->buffer_mfn = opt_tbuf_size ? virt_to_mfn(t_bufs[0]) : 0UL;
+ tbc->buffer_mfn = opt_tbuf_size ? virt_to_mfn(per_cpu(t_bufs, 0)) : 0;
tbc->size = opt_tbuf_size * PAGE_SIZE;
break;
case DOM0_TBUF_SET_CPU_MASK:
@@ -258,7 +259,7 @@ void trace(u32 event, unsigned long d1,
/* Read tb_init_done /before/ t_bufs. */
rmb();
- buf = t_bufs[smp_processor_id()];
+ buf = this_cpu(t_bufs);
local_irq_save(flags);
@@ -272,7 +273,7 @@ void trace(u32 event, unsigned long d1,
if ( unlikely(this_cpu(lost_records) != 0) )
{
- rec = &t_recs[smp_processor_id()][buf->prod % nr_recs];
+ rec = &this_cpu(t_recs)[buf->prod % nr_recs];
memset(rec, 0, sizeof(*rec));
rec->cycles = (u64)get_cycles();
rec->event = TRC_LOST_RECORDS;
@@ -283,7 +284,7 @@ void trace(u32 event, unsigned long d1,
buf->prod++;
}
- rec = &t_recs[smp_processor_id()][buf->prod % nr_recs];
+ rec = &this_cpu(t_recs)[buf->prod % nr_recs];
rec->cycles = (u64)get_cycles();
rec->event = event;
rec->data[0] = d1;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|