diff --git a/kernel/kprintf.h b/kernel/kprintf.h index bc9f395..ec8bdcf 100644 --- a/kernel/kprintf.h +++ b/kernel/kprintf.h @@ -7,7 +7,9 @@ #define kprintf(fmt, ...) \ do { \ + spinlock_acquire(&TERM.spinlock); \ printf_(fmt, ##__VA_ARGS__); \ + spinlock_release(&TERM.spinlock); \ } while(0) #define ksprintf sprintf_ diff --git a/kernel/term/term.c b/kernel/term/term.c index 5ec9065..14f6065 100644 --- a/kernel/term/term.c +++ b/kernel/term/term.c @@ -32,6 +32,7 @@ void term_doinit(void *addr) { void term_init(void *addr) { term_doinit(addr); + spinlock_init(&TERM.spinlock); } void term_write_unsafe(const char *s, size_t len) { diff --git a/kernel/term/term.h b/kernel/term/term.h index cf1d5c3..fe91fe2 100644 --- a/kernel/term/term.h +++ b/kernel/term/term.h @@ -7,6 +7,7 @@ typedef struct { struct flanterm_context *ftctx; + SpinLock spinlock; } Term; extern Term TERM;