Spinlock debugging infrastructure
[akaros.git] / kern / src / printf.c
index df4677f..86d104b 100644 (file)
@@ -6,13 +6,13 @@
 #endif
 
 #include <arch/arch.h>
 #endif
 
 #include <arch/arch.h>
-#include <arch/types.h>
+#include <ros/common.h>
 
 #include <atomic.h>
 #include <stdio.h>
 #include <stdarg.h>
 
 
 #include <atomic.h>
 #include <stdio.h>
 #include <stdarg.h>
 
-uint32_t output_lock = 0;
+spinlock_t output_lock = SPINLOCK_INITIALIZER;
 
 void putch(int ch, int **cnt)
 {
 
 void putch(int ch, int **cnt)
 {
@@ -26,8 +26,8 @@ void putch(int ch, int **cnt)
 void buffered_putch(int ch, int **cnt)
 {
        #define buffered_putch_bufsize 64
 void buffered_putch(int ch, int **cnt)
 {
        #define buffered_putch_bufsize 64
-       static char buf[buffered_putch_bufsize];
-       static int buflen = 0;
+       static char LCKD(&output_lock) (RO buf)[buffered_putch_bufsize];
+       static int LCKD(&output_lock) buflen = 0;
 
        if(ch != -1)
        {
 
        if(ch != -1)
        {
@@ -52,7 +52,11 @@ int vcprintf(const char *fmt, va_list ap)
        spin_lock_irqsave(&output_lock);
 
        // do the buffered printf
        spin_lock_irqsave(&output_lock);
 
        // do the buffered printf
+       #ifdef __DEPUTY__
        vprintfmt(buffered_putch, &cntp, fmt, ap);
        vprintfmt(buffered_putch, &cntp, fmt, ap);
+       #else
+       vprintfmt((void*)buffered_putch, (void*)&cntp, fmt, ap);
+       #endif
 
        // write out remaining chars in the buffer
        buffered_putch(-1,&cntp);
 
        // write out remaining chars in the buffer
        buffered_putch(-1,&cntp);