linux/kernel/printk/internal.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/*
   3 * internal.h - printk internal definitions
   4 */
   5#include <linux/percpu.h>
   6
   7#ifdef CONFIG_PRINTK
   8
   9#define PRINTK_SAFE_CONTEXT_MASK         0x3fffffff
  10#define PRINTK_NMI_DIRECT_CONTEXT_MASK   0x40000000
  11#define PRINTK_NMI_CONTEXT_MASK          0x80000000
  12
  13extern raw_spinlock_t logbuf_lock;
  14
  15__printf(5, 0)
  16int vprintk_store(int facility, int level,
  17                  const char *dict, size_t dictlen,
  18                  const char *fmt, va_list args);
  19
  20__printf(1, 0) int vprintk_default(const char *fmt, va_list args);
  21__printf(1, 0) int vprintk_deferred(const char *fmt, va_list args);
  22__printf(1, 0) int vprintk_func(const char *fmt, va_list args);
  23void __printk_safe_enter(void);
  24void __printk_safe_exit(void);
  25
  26#define printk_safe_enter_irqsave(flags)        \
  27        do {                                    \
  28                local_irq_save(flags);          \
  29                __printk_safe_enter();          \
  30        } while (0)
  31
  32#define printk_safe_exit_irqrestore(flags)      \
  33        do {                                    \
  34                __printk_safe_exit();           \
  35                local_irq_restore(flags);       \
  36        } while (0)
  37
  38#define printk_safe_enter_irq()         \
  39        do {                                    \
  40                local_irq_disable();            \
  41                __printk_safe_enter();          \
  42        } while (0)
  43
  44#define printk_safe_exit_irq()                  \
  45        do {                                    \
  46                __printk_safe_exit();           \
  47                local_irq_enable();             \
  48        } while (0)
  49
  50void defer_console_output(void);
  51
  52#else
  53
  54__printf(1, 0) int vprintk_func(const char *fmt, va_list args) { return 0; }
  55
  56/*
  57 * In !PRINTK builds we still export logbuf_lock spin_lock, console_sem
  58 * semaphore and some of console functions (console_unlock()/etc.), so
  59 * printk-safe must preserve the existing local IRQ guarantees.
  60 */
  61#define printk_safe_enter_irqsave(flags) local_irq_save(flags)
  62#define printk_safe_exit_irqrestore(flags) local_irq_restore(flags)
  63
  64#define printk_safe_enter_irq() local_irq_disable()
  65#define printk_safe_exit_irq() local_irq_enable()
  66
  67#endif /* CONFIG_PRINTK */
  68