summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDong Du <Dd_nirvana@sjtu.edu.cn>2021-08-28 09:45:02 +0300
committerAnup Patel <anup@brainfault.org>2021-08-30 06:42:37 +0300
commitc2623065331a9ae93f7dbd9d1bc7b4d46d0415a6 (patch)
tree92b999cbb1209ea4e2ed863630db7bb839d38914 /lib
parentbd316e2c9bf855b7b7918e71622a9cded6a176ad (diff)
downloadopensbi-c2623065331a9ae93f7dbd9d1bc7b4d46d0415a6.tar.xz
lib: sbi: protect dprintf output with spinlock
Avoid getting messages from multiple harts (using dprintf and printf) concurrently with a spinlock serializaing calls to sbi_dprintf(), sbi_printf() and sbi_puts() Signed-off-by: Dong Du <Dd_nirvana@sjtu.edu.cn> Reviewed-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup.patel@wdc.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/sbi/sbi_console.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/sbi/sbi_console.c b/lib/sbi/sbi_console.c
index b54f7a2..29eede3 100644
--- a/lib/sbi/sbi_console.c
+++ b/lib/sbi/sbi_console.c
@@ -387,8 +387,11 @@ int sbi_dprintf(const char *format, ...)
struct sbi_scratch *scratch = sbi_scratch_thishart_ptr();
va_start(args, format);
- if (scratch->options & SBI_SCRATCH_DEBUG_PRINTS)
+ if (scratch->options & SBI_SCRATCH_DEBUG_PRINTS) {
+ spin_lock(&console_out_lock);
retval = print(NULL, NULL, format, args);
+ spin_unlock(&console_out_lock);
+ }
va_end(args);
return retval;