1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * internal.h - printk internal definitions 4 */ 5 #include <linux/percpu.h> 6 7 #if defined(CONFIG_PRINTK) && defined(CONFIG_SYSCTL) 8 void __init printk_sysctl_init(void); 9 int devkmsg_sysctl_set_loglvl(struct ctl_table *table, int write, 10 void *buffer, size_t *lenp, loff_t *ppos); 11 #else 12 #define printk_sysctl_init() do { } while (0) 13 #endif 14 15 #ifdef CONFIG_PRINTK 16 17 /* Flags for a single printk record. */ 18 enum printk_info_flags { 19 LOG_NEWLINE = 2, /* text ended with a newline */ 20 LOG_CONT = 8, /* text is a fragment of a continuation line */ 21 }; 22 23 extern bool block_console_kthreads; 24 25 __printf(4, 0) 26 int vprintk_store(int facility, int level, 27 const struct dev_printk_info *dev_info, 28 const char *fmt, va_list args); 29 30 __printf(1, 0) int vprintk_default(const char *fmt, va_list args); 31 __printf(1, 0) int vprintk_deferred(const char *fmt, va_list args); 32 33 bool printk_percpu_data_ready(void); 34 35 #define printk_safe_enter_irqsave(flags) \ 36 do { \ 37 local_irq_save(flags); \ 38 __printk_safe_enter(); \ 39 } while (0) 40 41 #define printk_safe_exit_irqrestore(flags) \ 42 do { \ 43 __printk_safe_exit(); \ 44 local_irq_restore(flags); \ 45 } while (0) 46 47 void defer_console_output(void); 48 49 u16 printk_parse_prefix(const char *text, int *level, 50 enum printk_info_flags *flags); 51 #else 52 53 /* 54 * In !PRINTK builds we still export console_sem 55 * semaphore and some of console functions (console_unlock()/etc.), so 56 * printk-safe must preserve the existing local IRQ guarantees. 57 */ 58 #define printk_safe_enter_irqsave(flags) local_irq_save(flags) 59 #define printk_safe_exit_irqrestore(flags) local_irq_restore(flags) 60 61 static inline bool printk_percpu_data_ready(void) { return false; } 62 #endif /* CONFIG_PRINTK */ 63