Syscall tracing handles dropped traces
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 3 Sep 2014 00:20:48 +0000 (17:20 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 3 Sep 2014 05:05:07 +0000 (22:05 -0700)
If a trace is getting dropped, we'll output the trace instead.

This should rarely happen (OOM), unless we change the queue code.

kern/drivers/dev/kprof.c

index 5dde881..ba92eeb 100644 (file)
@@ -342,8 +342,14 @@ kprofwrite(struct chan *c, void *a, long n, int64_t unused)
 
 void kprof_write_sysrecord(char *pretty_buf, size_t len)
 {
-       if (kprof.systrace)
-               qiwrite(kprof.systrace, pretty_buf, len);
+       int wrote;
+       if (kprof.systrace) {
+               wrote = qiwrite(kprof.systrace, pretty_buf, len);
+               /* based on the current queue settings, we only drop when we're running
+                * out of memory.  odds are, we won't make it this far. */
+               if (wrote != len)
+                       printk("DROPPED %s", pretty_buf);
+       }
 }
 
 struct dev kprofdevtab __devtab = {