提交 21c0c13e 编写于 作者: S Sergey Senozhatsky 提交者: Xie XiuQi

printk: move printk_safe macros to printk header

euler inclusion
category: bugfix
bugzilla: 9509
CVE: NA
-------------------------------------------------

Make printk_safe_enter_irqsave()/etc macros available to the
rest of the kernel.
Signed-off-by: NSergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Signed-off-by: NHongbo Yao <yaohongbo@huawei.com>
Reviewed-by: NYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 03af0f59
...@@ -157,6 +157,46 @@ static inline void printk_nmi_direct_enter(void) { } ...@@ -157,6 +157,46 @@ static inline void printk_nmi_direct_enter(void) { }
static inline void printk_nmi_direct_exit(void) { } static inline void printk_nmi_direct_exit(void) { }
#endif /* PRINTK_NMI */ #endif /* PRINTK_NMI */
#ifdef CONFIG_PRINTK
extern void printk_safe_enter(void);
extern void printk_safe_exit(void);
#define printk_safe_enter_irqsave(flags) \
do { \
local_irq_save(flags); \
printk_safe_enter(); \
} while (0)
#define printk_safe_exit_irqrestore(flags) \
do { \
printk_safe_exit(); \
local_irq_restore(flags); \
} while (0)
#define printk_safe_enter_irq() \
do { \
local_irq_disable(); \
printk_safe_enter(); \
} while (0)
#define printk_safe_exit_irq() \
do { \
printk_safe_exit(); \
local_irq_enable(); \
} while (0)
#else
/*
* On !PRINTK builds we still export console output related locks
* and some functions (console_unlock()/tty/etc.), so printk-safe
* must preserve the existing local IRQ guarantees.
*/
#define printk_safe_enter_irqsave(flags) local_irq_save(flags)
#define printk_safe_exit_irqrestore(flags) local_irq_restore(flags)
#define printk_safe_enter_irq() local_irq_disable()
#define printk_safe_exit_irq() local_irq_enable()
#endif
#ifdef CONFIG_PRINTK #ifdef CONFIG_PRINTK
asmlinkage __printf(5, 0) asmlinkage __printf(5, 0)
int vprintk_emit(int facility, int level, int vprintk_emit(int facility, int level,
......
...@@ -32,32 +32,6 @@ int vprintk_store(int facility, int level, ...@@ -32,32 +32,6 @@ int vprintk_store(int facility, int level,
__printf(1, 0) int vprintk_default(const char *fmt, va_list args); __printf(1, 0) int vprintk_default(const char *fmt, va_list args);
__printf(1, 0) int vprintk_deferred(const char *fmt, va_list args); __printf(1, 0) int vprintk_deferred(const char *fmt, va_list args);
__printf(1, 0) int vprintk_func(const char *fmt, va_list args); __printf(1, 0) int vprintk_func(const char *fmt, va_list args);
void __printk_safe_enter(void);
void __printk_safe_exit(void);
#define printk_safe_enter_irqsave(flags) \
do { \
local_irq_save(flags); \
__printk_safe_enter(); \
} while (0)
#define printk_safe_exit_irqrestore(flags) \
do { \
__printk_safe_exit(); \
local_irq_restore(flags); \
} while (0)
#define printk_safe_enter_irq() \
do { \
local_irq_disable(); \
__printk_safe_enter(); \
} while (0)
#define printk_safe_exit_irq() \
do { \
__printk_safe_exit(); \
local_irq_enable(); \
} while (0)
void defer_console_output(void); void defer_console_output(void);
...@@ -65,15 +39,4 @@ void defer_console_output(void); ...@@ -65,15 +39,4 @@ void defer_console_output(void);
__printf(1, 0) int vprintk_func(const char *fmt, va_list args) { return 0; } __printf(1, 0) int vprintk_func(const char *fmt, va_list args) { return 0; }
/*
* In !PRINTK builds we still export logbuf_lock spin_lock, console_sem
* semaphore and some of console functions (console_unlock()/etc.), so
* printk-safe must preserve the existing local IRQ guarantees.
*/
#define printk_safe_enter_irqsave(flags) local_irq_save(flags)
#define printk_safe_exit_irqrestore(flags) local_irq_restore(flags)
#define printk_safe_enter_irq() local_irq_disable()
#define printk_safe_exit_irq() local_irq_enable()
#endif /* CONFIG_PRINTK */ #endif /* CONFIG_PRINTK */
...@@ -359,16 +359,18 @@ static __printf(1, 0) int vprintk_safe(const char *fmt, va_list args) ...@@ -359,16 +359,18 @@ static __printf(1, 0) int vprintk_safe(const char *fmt, va_list args)
} }
/* Can be preempted by NMI. */ /* Can be preempted by NMI. */
void __printk_safe_enter(void) void printk_safe_enter(void)
{ {
this_cpu_inc(printk_context); this_cpu_inc(printk_context);
} }
EXPORT_SYMBOL_GPL(printk_safe_enter);
/* Can be preempted by NMI. */ /* Can be preempted by NMI. */
void __printk_safe_exit(void) void printk_safe_exit(void)
{ {
this_cpu_dec(printk_context); this_cpu_dec(printk_context);
} }
EXPORT_SYMBOL_GPL(printk_safe_exit);
__printf(1, 0) int vprintk_func(const char *fmt, va_list args) __printf(1, 0) int vprintk_func(const char *fmt, va_list args)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册