ktop now drains the ring buffer

Before beginning to collect data, ktop now drains the per cpu ring buffers.
Also fixed a couple of problems in dumping the ring buffers while testing.

BUG=chromium-os:38503
TEST=ran on stumpy

Change-Id: I3fce487ce4dab6df1f1ff34d1b401ba2d258472d
Reviewed-on: https://gerrit.chromium.org/gerrit/42675
Tested-by: Paul Taysom <taysom@chromium.org>
Reviewed-by: Luigi Semenzato <semenzato@chromium.org>
Commit-Queue: Paul Taysom <taysom@chromium.org>
diff --git a/collector.c b/collector.c
index 5b6e0ad..9275fde 100644
--- a/collector.c
+++ b/collector.c
@@ -367,7 +367,7 @@
 			size = 4 + length * 4;
 			time += r->time_delta;
 			if (Dump) {
-				dump_event(buf);
+				dump_event(buf+4);
 			} else {
 				parse_event(buf+4, time);
 			}
@@ -402,6 +402,24 @@
 	return commit;
 }
 
+/*
+ * drain any data that may have accumlated in previous runs
+ */
+void drain(int cpu)
+{
+	u8 buf[BUF_SIZE];
+	int trace_pipe = open_raw(cpu);
+	int rc;
+
+	for (;;) {
+		rc = read(trace_pipe, buf, sizeof(buf));
+		if (rc <= 0) {
+			break;
+		}
+	}
+	close(trace_pipe);
+}
+
 void *collector(void *args)
 {
 	Collector_args_s *a = args;
@@ -416,6 +434,7 @@
 	int rc;
 	int i;
 
+	drain(cpu);
 	ignore_pid(gettid());
 	trace_pipe = open_raw(cpu);
 	for (i = 0;; i++) {
diff --git a/collector.h b/collector.h
index c849f81..bc56aeb 100644
--- a/collector.h
+++ b/collector.h
@@ -72,6 +72,7 @@
 void *dump_collector(void *args);
 void dump_event(void *buf);
 void pr_ring_header(ring_header_s *rh);
+void drain(int cpu);
 
 extern int Sys_exit;
 extern int Sys_enter;
diff --git a/dump.c b/dump.c
index f5d47d5..3e6aeed 100644
--- a/dump.c
+++ b/dump.c
@@ -51,7 +51,7 @@
 
 void pr_ring_header(ring_header_s *rh)
 {
-	printf("%lld %lld %ld\n",
+	printf("ring header: %lld %lld %ld\n",
 		rh->time_stamp / ONE_BILLION, rh->time_stamp % ONE_BILLION,
 		rh->commit);
 }
@@ -84,6 +84,7 @@
 	int rc;
 	int i;
 
+	drain(cpu);
 	ignore_pid(gettid());
 	trace_pipe = open_raw(cpu);
 	for (i = 0;; i++) {