Changeset 90dd8aee in mainline
- Timestamp:
- 2025-04-10T17:55:36Z (3 days ago)
- Branches:
- master
- Children:
- 8165a7a, c0d814a
- Parents:
- c55ab66
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2025-04-10 11:33:46)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2025-04-10 17:55:36)
- Location:
- kernel/generic
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/console/console.h
rc55ab66 r90dd8aee 76 76 extern sysarg_t sys_debug_console(void); 77 77 78 extern void console_lock(void); 79 extern void console_unlock(void); 80 78 81 #endif /* KERN_CONSOLE_H_ */ 79 82 -
kernel/generic/src/console/console.c
rc55ab66 r90dd8aee 34 34 */ 35 35 36 #include <abi/kio.h> 37 #include <arch.h> 36 38 #include <assert.h> 39 #include <atomic.h> 40 #include <console/chardev.h> 37 41 #include <console/console.h> 38 #include <console/chardev.h> 39 #include <sysinfo/sysinfo.h> 40 #include <synch/waitq.h> 41 #include <synch/spinlock.h> 42 #include <typedefs.h> 42 #include <ddi/ddi.h> 43 43 #include <ddi/irq.h> 44 #include < ddi/ddi.h>44 #include <errno.h> 45 45 #include <ipc/event.h> 46 46 #include <ipc/irq.h> 47 #include < arch.h>47 #include <mm/frame.h> /* SIZE2FRAMES */ 48 48 #include <panic.h> 49 #include <preemption.h> 50 #include <proc/thread.h> 51 #include <putchar.h> 52 #include <stdatomic.h> 49 53 #include <stdio.h> 50 #include <putchar.h> 51 #include <atomic.h> 54 #include <stdlib.h> /* malloc */ 55 #include <str.h> 56 #include <synch/mutex.h> 57 #include <synch/spinlock.h> 58 #include <synch/waitq.h> 52 59 #include <syscall/copy.h> 53 #include <errno.h> 54 #include <str.h> 55 #include <stdatomic.h> 56 #include <abi/kio.h> 57 #include <mm/frame.h> /* SIZE2FRAMES */ 58 #include <stdlib.h> /* malloc */ 60 #include <sysinfo/sysinfo.h> 61 #include <typedefs.h> 59 62 60 63 #define KIO_PAGES 8 … … 66 69 /** Kernel log initialized */ 67 70 static atomic_bool kio_inited = ATOMIC_VAR_INIT(false); 71 72 /** A mutex for preventing interleaving of output lines from different threads. 73 * May not be held in some circumstances, so locking of any internal shared 74 * structures is still necessary. 75 */ 76 static MUTEX_INITIALIZE(console_mutex, MUTEX_RECURSIVE); 68 77 69 78 /** First kernel log characters */ … … 395 404 } 396 405 406 /** Lock console output, ensuring that lines from different threads don't 407 * interleave. Does nothing when preemption is disabled, so that debugging 408 * and error printouts in sensitive areas still work. 409 */ 410 void console_lock(void) 411 { 412 if (!PREEMPTION_DISABLED) 413 mutex_lock(&console_mutex); 414 } 415 416 /** Unlocks console output. See console_lock() 417 */ 418 void console_unlock(void) 419 { 420 if (!PREEMPTION_DISABLED) 421 mutex_unlock(&console_mutex); 422 } 423 397 424 /** @} 398 425 */ -
kernel/generic/src/log/log.c
rc55ab66 r90dd8aee 151 151 void log_begin(log_facility_t fac, log_level_t level) 152 152 { 153 console_lock(); 153 154 spinlock_lock(&log_lock); 154 155 spinlock_lock(&kio_lock); … … 186 187 kio_update(NULL); 187 188 log_update(NULL); 189 console_unlock(); 188 190 } 189 191 -
kernel/generic/src/printf/vprintf.c
rc55ab66 r90dd8aee 33 33 */ 34 34 35 #include <arch/asm.h> 36 #include <console/console.h> 35 37 #include <print.h> 36 38 #include <printf/printf_core.h> 37 39 #include <putchar.h> 40 #include <str.h> 38 41 #include <synch/spinlock.h> 39 #include <arch/asm.h>40 42 #include <typedefs.h> 41 #include <str.h>42 43 43 44 static int vprintf_str_write(const char *str, size_t size, void *data) … … 74 75 char32_t uc; 75 76 77 console_lock(); 78 76 79 while ((uc = str_decode(str, &offset, STR_NO_LIMIT)) != 0) { 77 80 putuchar(uc); … … 80 83 81 84 putuchar('\n'); 85 86 console_unlock(); 82 87 return chars; 83 88 } … … 91 96 }; 92 97 93 return printf_core(fmt, &ps, ap); 98 console_lock(); 99 int ret = printf_core(fmt, &ps, ap); 100 console_unlock(); 101 return ret; 94 102 } 95 103
Note:
See TracChangeset
for help on using the changeset viewer.