4.14-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Petr Mladek <pmla...@suse.com>

commit ba552399954dde1b388f7749fecad5c349216981 upstream.

It is just a preparation step. The patch does not change
the existing behavior.

Link: http://lkml.kernel.org/r/20180627140817.27764-2-pmla...@suse.com
To: Steven Rostedt <rost...@goodmis.org>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Tetsuo Handa <penguin-ker...@i-love.sakura.ne.jp>
Cc: Sergey Senozhatsky <sergey.senozhatsky.w...@gmail.com>
Cc: linux-kernel@vger.kernel.org
Cc: sta...@vger.kernel.org
Acked-by: Sergey Senozhatsky <sergey.senozhat...@gmail.com>
Signed-off-by: Petr Mladek <pmla...@suse.com>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>

---
 kernel/printk/printk.c |   43 ++++++++++++++++++++++++++-----------------
 1 file changed, 26 insertions(+), 17 deletions(-)

--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -1680,28 +1680,16 @@ static size_t log_output(int facility, i
        return log_store(facility, level, lflags, 0, dict, dictlen, text, 
text_len);
 }
 
-asmlinkage int vprintk_emit(int facility, int level,
-                           const char *dict, size_t dictlen,
-                           const char *fmt, va_list args)
+/* Must be called under logbuf_lock. */
+int vprintk_store(int facility, int level,
+                 const char *dict, size_t dictlen,
+                 const char *fmt, va_list args)
 {
        static char textbuf[LOG_LINE_MAX];
        char *text = textbuf;
        size_t text_len;
        enum log_flags lflags = 0;
-       unsigned long flags;
-       int printed_len;
-       bool in_sched = false;
-
-       if (level == LOGLEVEL_SCHED) {
-               level = LOGLEVEL_DEFAULT;
-               in_sched = true;
-       }
-
-       boot_delay_msec(level);
-       printk_delay();
 
-       /* This stops the holder of console_sem just where we want him */
-       logbuf_lock_irqsave(flags);
        /*
         * The printf needs to come first; we need the syslog
         * prefix which might be passed-in as a parameter.
@@ -1742,8 +1730,29 @@ asmlinkage int vprintk_emit(int facility
        if (dict)
                lflags |= LOG_PREFIX|LOG_NEWLINE;
 
-       printed_len = log_output(facility, level, lflags, dict, dictlen, text, 
text_len);
+       return log_output(facility, level, lflags,
+                         dict, dictlen, text, text_len);
+}
 
+asmlinkage int vprintk_emit(int facility, int level,
+                           const char *dict, size_t dictlen,
+                           const char *fmt, va_list args)
+{
+       int printed_len;
+       bool in_sched = false;
+       unsigned long flags;
+
+       if (level == LOGLEVEL_SCHED) {
+               level = LOGLEVEL_DEFAULT;
+               in_sched = true;
+       }
+
+       boot_delay_msec(level);
+       printk_delay();
+
+       /* This stops the holder of console_sem just where we want him */
+       logbuf_lock_irqsave(flags);
+       printed_len = vprintk_store(facility, level, dict, dictlen, fmt, args);
        logbuf_unlock_irqrestore(flags);
 
        /* If called from the scheduler, we can not call up(). */


Reply via email to