internal.h 2.0 KB

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