|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] Added trace buffer virtual irq to implement non-polling
# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 12621916d8202c552ebf61127ef404354ed8ad0a
# Parent f84a333d8aa6e1a25e2b73b07610e95007267f6a
Added trace buffer virtual irq to implement non-polling trace record access.
Signed-off-by: Rob Gardner <rob.gardner@xxxxxx>
diff -r f84a333d8aa6 -r 12621916d820 xen/common/trace.c
--- a/xen/common/trace.c Fri Apr 7 17:41:28 2006
+++ b/xen/common/trace.c Sat Apr 8 08:05:53 2006
@@ -27,6 +27,8 @@
#include <xen/smp.h>
#include <xen/trace.h>
#include <xen/errno.h>
+#include <xen/event.h>
+#include <xen/softirq.h>
#include <xen/init.h>
#include <asm/atomic.h>
#include <public/dom0_ops.h>
@@ -40,6 +42,11 @@
static struct t_rec *t_recs[NR_CPUS];
static int nr_recs;
+/* High water mark for trace buffers; */
+/* Send virtual interrupt when buffer level reaches this point */
+static int t_buf_highwater;
+
+
/* a flag recording whether initialization has been done */
/* or more properly, if the tbuf subsystem is enabled right now */
int tb_init_done;
@@ -49,6 +56,12 @@
/* which tracing events are enabled */
static u32 tb_event_mask = TRC_ALL;
+
+static void trace_notify_guest(void)
+{
+ send_guest_global_virq(dom0, VIRQ_TBUF);
+}
+
/**
* alloc_trace_bufs - performs initialization of the per-cpu trace buffers.
@@ -92,6 +105,9 @@
buf->cons = buf->prod = 0;
t_recs[i] = (struct t_rec *)(buf + 1);
}
+
+ t_buf_highwater = nr_recs >> 1; /* 50% high water */
+ open_softirq(TRACE_SOFTIRQ, trace_notify_guest);
return 0;
}
@@ -272,6 +288,13 @@
buf->prod++;
local_irq_restore(flags);
+
+ /*
+ * Notify trace buffer consumer that we've reached the high water mark.
+ *
+ */
+ if ( (buf->prod - buf->cons) == t_buf_highwater )
+ raise_softirq(TRACE_SOFTIRQ);
}
/*
diff -r f84a333d8aa6 -r 12621916d820 xen/include/public/xen.h
--- a/xen/include/public/xen.h Fri Apr 7 17:41:28 2006
+++ b/xen/include/public/xen.h Sat Apr 8 08:05:53 2006
@@ -77,6 +77,7 @@
#define VIRQ_DEBUG 1 /* V. Request guest to dump debug info. */
#define VIRQ_CONSOLE 2 /* G. (DOM0) Bytes received on emergency console. */
#define VIRQ_DOM_EXC 3 /* G. (DOM0) Exceptional event for some domain. */
+#define VIRQ_TBUF 4 /* G. (DOM0) Trace buffer has records available. */
#define VIRQ_DEBUGGER 6 /* G. (DOM0) A domain has paused for debugging. */
#define VIRQ_XENOPROF 7 /* V. XenOprofile interrupt: new sample available */
#define NR_VIRQS 8
diff -r f84a333d8aa6 -r 12621916d820 xen/include/xen/softirq.h
--- a/xen/include/xen/softirq.h Fri Apr 7 17:41:28 2006
+++ b/xen/include/xen/softirq.h Sat Apr 8 08:05:53 2006
@@ -9,7 +9,8 @@
#define NMI_SOFTIRQ 4
#define PAGE_SCRUB_SOFTIRQ 5
#define DOMAIN_SHUTDOWN_FINALISE_SOFTIRQ 6
-#define NR_SOFTIRQS 7
+#define TRACE_SOFTIRQ 7
+#define NR_SOFTIRQS 8
#ifndef __ASSEMBLY__
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] Added trace buffer virtual irq to implement non-polling trace record access.,
Xen patchbot -unstable <=
|
|
|
|
|