static unsigned int debugtrace_prd; /* Producer index */
static unsigned int debugtrace_kilobytes = 128, debugtrace_bytes;
static unsigned int debugtrace_used;
+static bool debugtrace_buf_empty = true;
static DEFINE_SPINLOCK(debugtrace_lock);
integer_param("debugtrace", debugtrace_kilobytes);
printk("debugtrace_dump() starting\n");
/* Print oldest portion of the ring. */
- ASSERT(debugtrace_buf[debugtrace_bytes - 1] == 0);
if ( debugtrace_buf[debugtrace_prd] != '\0' )
console_serial_puts(&debugtrace_buf[debugtrace_prd],
- debugtrace_bytes - debugtrace_prd - 1);
+ debugtrace_bytes - debugtrace_prd);
/* Print youngest portion of the ring. */
debugtrace_buf[debugtrace_prd] = '\0';
console_serial_puts(&debugtrace_buf[0], debugtrace_prd);
memset(debugtrace_buf, '\0', debugtrace_bytes);
+ debugtrace_prd = 0;
+ debugtrace_buf_empty = true;
printk("debugtrace_dump() finished\n");
}
for ( p = buf; *p != '\0'; p++ )
{
debugtrace_buf[debugtrace_prd++] = *p;
- /* Always leave a nul byte at the end of the buffer. */
- if ( debugtrace_prd == (debugtrace_bytes - 1) )
+ if ( debugtrace_prd == debugtrace_bytes )
debugtrace_prd = 0;
}
}
spin_lock_irqsave(&debugtrace_lock, flags);
- ASSERT(debugtrace_buf[debugtrace_bytes - 1] == 0);
-
va_start(args, fmt);
nr = vscnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
}
else
{
- if ( strcmp(buf, last_buf) )
+ if ( debugtrace_buf_empty || strcmp(buf, last_buf) )
{
+ debugtrace_buf_empty = false;
last_prd = debugtrace_prd;
last_count = ++count;
safe_strcpy(last_buf, buf);