static DECLARE_WAIT_QUEUE_HEAD(trace_wait);
 
 /* trace_flags holds trace_options default values */
-unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK;
+unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK |
+       TRACE_ITER_ANNOTATE;
 
 /**
  * trace_wake_up - wake up tasks waiting for trace input
 #ifdef CONFIG_BRANCH_TRACER
        "branch",
 #endif
+       "annotate",
        NULL
 };
 
 
 enum trace_file_type {
        TRACE_FILE_LAT_FMT      = 1,
+       TRACE_FILE_ANNOTATE     = 2,
 };
 
 static void trace_iterator_increment(struct trace_iterator *iter, int cpu)
 {
        struct trace_seq *s = &iter->seq;
 
+       if (!(trace_flags & TRACE_ITER_ANNOTATE))
+               return;
+
+       if (!(iter->iter_flags & TRACE_FILE_ANNOTATE))
+               return;
+
        if (cpu_isset(iter->cpu, iter->started))
                return;
 
        iter->trace = current_trace;
        iter->pos = -1;
 
+       /* Annotate start of buffers if we had overruns */
+       if (ring_buffer_overruns(iter->tr->buffer))
+               iter->iter_flags |= TRACE_FILE_ANNOTATE;
+
+
        for_each_tracing_cpu(cpu) {
 
                iter->buffer_iter[cpu] =
 
 #ifdef CONFIG_BRANCH_TRACER
        TRACE_ITER_BRANCH               = 0x1000,
 #endif
+       TRACE_ITER_ANNOTATE             = 0x2000,
 };
 
 /*