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] Enable compatibility mode operation for t

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Enable compatibility mode operation for trace buffer access.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 05 Jan 2007 12:55:33 -0800
Delivery-date: Fri, 05 Jan 2007 12:56:56 -0800
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 Emmanuel Ackaouy <ack@xxxxxxxxxxxxx>
# Date 1168018480 0
# Node ID 762cb69ce3be132461498271f720812fe00ac463
# Parent  5442b2458e1b2d07e6ae06ebbbc1071c8fd544cb
Enable compatibility mode operation for trace buffer access.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
---
 xen/common/trace.c   |   78 +++++++++++++++++++++++++++++++++++++++------------
 xen/include/xlat.lst |    1 
 2 files changed, 61 insertions(+), 18 deletions(-)

diff -r 5442b2458e1b -r 762cb69ce3be xen/common/trace.c
--- a/xen/common/trace.c        Fri Jan 05 17:34:39 2007 +0000
+++ b/xen/common/trace.c        Fri Jan 05 17:34:40 2007 +0000
@@ -32,13 +32,29 @@
 #include <asm/atomic.h>
 #include <public/sysctl.h>
 
+#ifdef CONFIG_COMPAT
+#include <compat/trace.h>
+#define xen_t_buf t_buf
+CHECK_t_buf;
+#undef xen_t_buf
+#define TB_COMPAT IS_COMPAT(dom0)
+#else
+#define compat_t_rec t_rec
+#define TB_COMPAT 0
+#endif
+
+typedef union {
+       struct t_rec *nat;
+       struct compat_t_rec *cmp;
+} t_rec_u;
+
 /* opt_tbuf_size: trace buffer size (in pages) */
 static unsigned int opt_tbuf_size = 0;
 integer_param("tbuf_size", opt_tbuf_size);
 
 /* Pointers to the meta-data objects for all system trace buffers */
 static DEFINE_PER_CPU(struct t_buf *, t_bufs);
-static DEFINE_PER_CPU(struct t_rec *, t_recs);
+static DEFINE_PER_CPU(t_rec_u, t_recs);
 static int nr_recs;
 
 /* High water mark for trace buffers; */
@@ -87,7 +103,7 @@ static int alloc_trace_bufs(void)
     nr_pages = num_online_cpus() * opt_tbuf_size;
     order    = get_order_from_pages(nr_pages);
     nr_recs  = (opt_tbuf_size * PAGE_SIZE - sizeof(struct t_buf)) /
-        sizeof(struct t_rec);
+        (!TB_COMPAT ? sizeof(struct t_rec) : sizeof(struct compat_t_rec));
     
     if ( (rawbuf = alloc_xenheap_pages(order)) == NULL )
     {
@@ -106,7 +122,7 @@ static int alloc_trace_bufs(void)
         buf = per_cpu(t_bufs, i) = (struct t_buf *)
             &rawbuf[i*opt_tbuf_size*PAGE_SIZE];
         buf->cons = buf->prod = 0;
-        per_cpu(t_recs, i) = (struct t_rec *)(buf + 1);
+        per_cpu(t_recs, i).nat = (struct t_rec *)(buf + 1);
     }
 
     t_buf_highwater = nr_recs >> 1; /* 50% high water */
@@ -232,7 +248,7 @@ void trace(u32 event, unsigned long d1, 
            unsigned long d3, unsigned long d4, unsigned long d5)
 {
     struct t_buf *buf;
-    struct t_rec *rec;
+    t_rec_u rec;
     unsigned long flags;
     
     BUG_ON(!tb_init_done);
@@ -269,25 +285,51 @@ void trace(u32 event, unsigned long d1, 
 
     if ( unlikely(this_cpu(lost_records) != 0) )
     {
-        rec = &this_cpu(t_recs)[buf->prod % nr_recs];
-        memset(rec, 0, sizeof(*rec));
-        rec->cycles  = (u64)get_cycles();
-        rec->event   = TRC_LOST_RECORDS;
-        rec->data[0] = this_cpu(lost_records);
-        this_cpu(lost_records) = 0;
+        if ( !TB_COMPAT )
+        {
+            rec.nat = &this_cpu(t_recs).nat[buf->prod % nr_recs];
+            memset(rec.nat, 0, sizeof(*rec.nat));
+            rec.nat->cycles  = (u64)get_cycles();
+            rec.nat->event   = TRC_LOST_RECORDS;
+            rec.nat->data[0] = this_cpu(lost_records);
+            this_cpu(lost_records) = 0;
+        }
+        else
+        {
+            rec.cmp = &this_cpu(t_recs).cmp[buf->prod % nr_recs];
+            memset(rec.cmp, 0, sizeof(*rec.cmp));
+            rec.cmp->cycles  = (u64)get_cycles();
+            rec.cmp->event   = TRC_LOST_RECORDS;
+            rec.cmp->data[0] = this_cpu(lost_records);
+            this_cpu(lost_records) = 0;
+        }
 
         wmb();
         buf->prod++;
     }
 
-    rec = &this_cpu(t_recs)[buf->prod % nr_recs];
-    rec->cycles  = (u64)get_cycles();
-    rec->event   = event;
-    rec->data[0] = d1;
-    rec->data[1] = d2;
-    rec->data[2] = d3;
-    rec->data[3] = d4;
-    rec->data[4] = d5;
+    if ( !TB_COMPAT )
+    {
+        rec.nat = &this_cpu(t_recs).nat[buf->prod % nr_recs];
+        rec.nat->cycles  = (u64)get_cycles();
+        rec.nat->event   = event;
+        rec.nat->data[0] = d1;
+        rec.nat->data[1] = d2;
+        rec.nat->data[2] = d3;
+        rec.nat->data[3] = d4;
+        rec.nat->data[4] = d5;
+    }
+    else
+    {
+        rec.cmp = &this_cpu(t_recs).cmp[buf->prod % nr_recs];
+        rec.cmp->cycles  = (u64)get_cycles();
+        rec.cmp->event   = event;
+        rec.cmp->data[0] = d1;
+        rec.cmp->data[1] = d2;
+        rec.cmp->data[2] = d3;
+        rec.cmp->data[3] = d4;
+        rec.cmp->data[4] = d5;
+    }
 
     wmb();
     buf->prod++;
diff -r 5442b2458e1b -r 762cb69ce3be xen/include/xlat.lst
--- a/xen/include/xlat.lst      Fri Jan 05 17:34:39 2007 +0000
+++ b/xen/include/xlat.lst      Fri Jan 05 17:34:40 2007 +0000
@@ -44,6 +44,7 @@
 ?      sysctl_perfc_desc               sysctl.h
 !      sysctl_perfc_op                 sysctl.h
 !      sysctl_tbuf_op                  sysctl.h
+?      t_buf                           trace.h
 !      vcpu_runstate_info              vcpu.h
 ?      xenoprof_init                   xenoprof.h
 ?      xenoprof_passive                xenoprof.h

_______________________________________________
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] Enable compatibility mode operation for trace buffer access., Xen patchbot-unstable <=