LCOV - code coverage report
Current view: top level - kernel/printk - printk.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 370 1135 32.6 %
Date: 2023-03-27 20:00:47 Functions: 29 96 30.2 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0-only
       2             : /*
       3             :  *  linux/kernel/printk.c
       4             :  *
       5             :  *  Copyright (C) 1991, 1992  Linus Torvalds
       6             :  *
       7             :  * Modified to make sys_syslog() more flexible: added commands to
       8             :  * return the last 4k of kernel messages, regardless of whether
       9             :  * they've been read or not.  Added option to suppress kernel printk's
      10             :  * to the console.  Added hook for sending the console messages
      11             :  * elsewhere, in preparation for a serial line console (someday).
      12             :  * Ted Ts'o, 2/11/93.
      13             :  * Modified for sysctl support, 1/8/97, Chris Horn.
      14             :  * Fixed SMP synchronization, 08/08/99, Manfred Spraul
      15             :  *     manfred@colorfullife.com
      16             :  * Rewrote bits to get rid of console_lock
      17             :  *      01Mar01 Andrew Morton
      18             :  */
      19             : 
      20             : #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
      21             : 
      22             : #include <linux/kernel.h>
      23             : #include <linux/mm.h>
      24             : #include <linux/tty.h>
      25             : #include <linux/tty_driver.h>
      26             : #include <linux/console.h>
      27             : #include <linux/init.h>
      28             : #include <linux/jiffies.h>
      29             : #include <linux/nmi.h>
      30             : #include <linux/module.h>
      31             : #include <linux/moduleparam.h>
      32             : #include <linux/delay.h>
      33             : #include <linux/smp.h>
      34             : #include <linux/security.h>
      35             : #include <linux/memblock.h>
      36             : #include <linux/syscalls.h>
      37             : #include <linux/crash_core.h>
      38             : #include <linux/ratelimit.h>
      39             : #include <linux/kmsg_dump.h>
      40             : #include <linux/syslog.h>
      41             : #include <linux/cpu.h>
      42             : #include <linux/rculist.h>
      43             : #include <linux/poll.h>
      44             : #include <linux/irq_work.h>
      45             : #include <linux/ctype.h>
      46             : #include <linux/uio.h>
      47             : #include <linux/sched/clock.h>
      48             : #include <linux/sched/debug.h>
      49             : #include <linux/sched/task_stack.h>
      50             : 
      51             : #include <linux/uaccess.h>
      52             : #include <asm/sections.h>
      53             : 
      54             : #include <trace/events/initcall.h>
      55             : #define CREATE_TRACE_POINTS
      56             : #include <trace/events/printk.h>
      57             : 
      58             : #include "printk_ringbuffer.h"
      59             : #include "console_cmdline.h"
      60             : #include "braille.h"
      61             : #include "internal.h"
      62             : 
      63             : int console_printk[4] = {
      64             :         CONSOLE_LOGLEVEL_DEFAULT,       /* console_loglevel */
      65             :         MESSAGE_LOGLEVEL_DEFAULT,       /* default_message_loglevel */
      66             :         CONSOLE_LOGLEVEL_MIN,           /* minimum_console_loglevel */
      67             :         CONSOLE_LOGLEVEL_DEFAULT,       /* default_console_loglevel */
      68             : };
      69             : EXPORT_SYMBOL_GPL(console_printk);
      70             : 
      71             : atomic_t ignore_console_lock_warning __read_mostly = ATOMIC_INIT(0);
      72             : EXPORT_SYMBOL(ignore_console_lock_warning);
      73             : 
      74             : /*
      75             :  * Low level drivers may need that to know if they can schedule in
      76             :  * their unblank() callback or not. So let's export it.
      77             :  */
      78             : int oops_in_progress;
      79             : EXPORT_SYMBOL(oops_in_progress);
      80             : 
      81             : /*
      82             :  * console_mutex protects console_list updates and console->flags updates.
      83             :  * The flags are synchronized only for consoles that are registered, i.e.
      84             :  * accessible via the console list.
      85             :  */
      86             : static DEFINE_MUTEX(console_mutex);
      87             : 
      88             : /*
      89             :  * console_sem protects updates to console->seq and console_suspended,
      90             :  * and also provides serialization for console printing.
      91             :  */
      92             : static DEFINE_SEMAPHORE(console_sem);
      93             : HLIST_HEAD(console_list);
      94             : EXPORT_SYMBOL_GPL(console_list);
      95             : DEFINE_STATIC_SRCU(console_srcu);
      96             : 
      97             : /*
      98             :  * System may need to suppress printk message under certain
      99             :  * circumstances, like after kernel panic happens.
     100             :  */
     101             : int __read_mostly suppress_printk;
     102             : 
     103             : /*
     104             :  * During panic, heavy printk by other CPUs can delay the
     105             :  * panic and risk deadlock on console resources.
     106             :  */
     107             : static int __read_mostly suppress_panic_printk;
     108             : 
     109             : #ifdef CONFIG_LOCKDEP
     110             : static struct lockdep_map console_lock_dep_map = {
     111             :         .name = "console_lock"
     112             : };
     113             : 
     114             : void lockdep_assert_console_list_lock_held(void)
     115             : {
     116             :         lockdep_assert_held(&console_mutex);
     117             : }
     118             : EXPORT_SYMBOL(lockdep_assert_console_list_lock_held);
     119             : #endif
     120             : 
     121             : #ifdef CONFIG_DEBUG_LOCK_ALLOC
     122             : bool console_srcu_read_lock_is_held(void)
     123             : {
     124             :         return srcu_read_lock_held(&console_srcu);
     125             : }
     126             : EXPORT_SYMBOL(console_srcu_read_lock_is_held);
     127             : #endif
     128             : 
     129             : enum devkmsg_log_bits {
     130             :         __DEVKMSG_LOG_BIT_ON = 0,
     131             :         __DEVKMSG_LOG_BIT_OFF,
     132             :         __DEVKMSG_LOG_BIT_LOCK,
     133             : };
     134             : 
     135             : enum devkmsg_log_masks {
     136             :         DEVKMSG_LOG_MASK_ON             = BIT(__DEVKMSG_LOG_BIT_ON),
     137             :         DEVKMSG_LOG_MASK_OFF            = BIT(__DEVKMSG_LOG_BIT_OFF),
     138             :         DEVKMSG_LOG_MASK_LOCK           = BIT(__DEVKMSG_LOG_BIT_LOCK),
     139             : };
     140             : 
     141             : /* Keep both the 'on' and 'off' bits clear, i.e. ratelimit by default: */
     142             : #define DEVKMSG_LOG_MASK_DEFAULT        0
     143             : 
     144             : static unsigned int __read_mostly devkmsg_log = DEVKMSG_LOG_MASK_DEFAULT;
     145             : 
     146           0 : static int __control_devkmsg(char *str)
     147             : {
     148             :         size_t len;
     149             : 
     150           0 :         if (!str)
     151             :                 return -EINVAL;
     152             : 
     153           0 :         len = str_has_prefix(str, "on");
     154           0 :         if (len) {
     155           0 :                 devkmsg_log = DEVKMSG_LOG_MASK_ON;
     156           0 :                 return len;
     157             :         }
     158             : 
     159           0 :         len = str_has_prefix(str, "off");
     160           0 :         if (len) {
     161           0 :                 devkmsg_log = DEVKMSG_LOG_MASK_OFF;
     162           0 :                 return len;
     163             :         }
     164             : 
     165           0 :         len = str_has_prefix(str, "ratelimit");
     166           0 :         if (len) {
     167           0 :                 devkmsg_log = DEVKMSG_LOG_MASK_DEFAULT;
     168           0 :                 return len;
     169             :         }
     170             : 
     171             :         return -EINVAL;
     172             : }
     173             : 
     174           0 : static int __init control_devkmsg(char *str)
     175             : {
     176           0 :         if (__control_devkmsg(str) < 0) {
     177           0 :                 pr_warn("printk.devkmsg: bad option string '%s'\n", str);
     178           0 :                 return 1;
     179             :         }
     180             : 
     181             :         /*
     182             :          * Set sysctl string accordingly:
     183             :          */
     184           0 :         if (devkmsg_log == DEVKMSG_LOG_MASK_ON)
     185           0 :                 strcpy(devkmsg_log_str, "on");
     186           0 :         else if (devkmsg_log == DEVKMSG_LOG_MASK_OFF)
     187           0 :                 strcpy(devkmsg_log_str, "off");
     188             :         /* else "ratelimit" which is set by default. */
     189             : 
     190             :         /*
     191             :          * Sysctl cannot change it anymore. The kernel command line setting of
     192             :          * this parameter is to force the setting to be permanent throughout the
     193             :          * runtime of the system. This is a precation measure against userspace
     194             :          * trying to be a smarta** and attempting to change it up on us.
     195             :          */
     196           0 :         devkmsg_log |= DEVKMSG_LOG_MASK_LOCK;
     197             : 
     198           0 :         return 1;
     199             : }
     200             : __setup("printk.devkmsg=", control_devkmsg);
     201             : 
     202             : char devkmsg_log_str[DEVKMSG_STR_MAX_SIZE] = "ratelimit";
     203             : #if defined(CONFIG_PRINTK) && defined(CONFIG_SYSCTL)
     204           0 : int devkmsg_sysctl_set_loglvl(struct ctl_table *table, int write,
     205             :                               void *buffer, size_t *lenp, loff_t *ppos)
     206             : {
     207             :         char old_str[DEVKMSG_STR_MAX_SIZE];
     208             :         unsigned int old;
     209             :         int err;
     210             : 
     211           0 :         if (write) {
     212           0 :                 if (devkmsg_log & DEVKMSG_LOG_MASK_LOCK)
     213             :                         return -EINVAL;
     214             : 
     215           0 :                 old = devkmsg_log;
     216           0 :                 strncpy(old_str, devkmsg_log_str, DEVKMSG_STR_MAX_SIZE);
     217             :         }
     218             : 
     219           0 :         err = proc_dostring(table, write, buffer, lenp, ppos);
     220           0 :         if (err)
     221             :                 return err;
     222             : 
     223           0 :         if (write) {
     224           0 :                 err = __control_devkmsg(devkmsg_log_str);
     225             : 
     226             :                 /*
     227             :                  * Do not accept an unknown string OR a known string with
     228             :                  * trailing crap...
     229             :                  */
     230           0 :                 if (err < 0 || (err + 1 != *lenp)) {
     231             : 
     232             :                         /* ... and restore old setting. */
     233           0 :                         devkmsg_log = old;
     234           0 :                         strncpy(devkmsg_log_str, old_str, DEVKMSG_STR_MAX_SIZE);
     235             : 
     236           0 :                         return -EINVAL;
     237             :                 }
     238             :         }
     239             : 
     240             :         return 0;
     241             : }
     242             : #endif /* CONFIG_PRINTK && CONFIG_SYSCTL */
     243             : 
     244             : /**
     245             :  * console_list_lock - Lock the console list
     246             :  *
     247             :  * For console list or console->flags updates
     248             :  */
     249           0 : void console_list_lock(void)
     250             : {
     251             :         /*
     252             :          * In unregister_console() and console_force_preferred_locked(),
     253             :          * synchronize_srcu() is called with the console_list_lock held.
     254             :          * Therefore it is not allowed that the console_list_lock is taken
     255             :          * with the srcu_lock held.
     256             :          *
     257             :          * Detecting if this context is really in the read-side critical
     258             :          * section is only possible if the appropriate debug options are
     259             :          * enabled.
     260             :          */
     261           4 :         WARN_ON_ONCE(debug_lockdep_rcu_enabled() &&
     262             :                      srcu_read_lock_held(&console_srcu));
     263             : 
     264           4 :         mutex_lock(&console_mutex);
     265           0 : }
     266             : EXPORT_SYMBOL(console_list_lock);
     267             : 
     268             : /**
     269             :  * console_list_unlock - Unlock the console list
     270             :  *
     271             :  * Counterpart to console_list_lock()
     272             :  */
     273           0 : void console_list_unlock(void)
     274             : {
     275           4 :         mutex_unlock(&console_mutex);
     276           0 : }
     277             : EXPORT_SYMBOL(console_list_unlock);
     278             : 
     279             : /**
     280             :  * console_srcu_read_lock - Register a new reader for the
     281             :  *      SRCU-protected console list
     282             :  *
     283             :  * Use for_each_console_srcu() to iterate the console list
     284             :  *
     285             :  * Context: Any context.
     286             :  * Return: A cookie to pass to console_srcu_read_unlock().
     287             :  */
     288           0 : int console_srcu_read_lock(void)
     289             : {
     290        1559 :         return srcu_read_lock_nmisafe(&console_srcu);
     291             : }
     292             : EXPORT_SYMBOL(console_srcu_read_lock);
     293             : 
     294             : /**
     295             :  * console_srcu_read_unlock - Unregister an old reader from
     296             :  *      the SRCU-protected console list
     297             :  * @cookie: cookie returned from console_srcu_read_lock()
     298             :  *
     299             :  * Counterpart to console_srcu_read_lock()
     300             :  */
     301           0 : void console_srcu_read_unlock(int cookie)
     302             : {
     303        1559 :         srcu_read_unlock_nmisafe(&console_srcu, cookie);
     304           0 : }
     305             : EXPORT_SYMBOL(console_srcu_read_unlock);
     306             : 
     307             : /*
     308             :  * Helper macros to handle lockdep when locking/unlocking console_sem. We use
     309             :  * macros instead of functions so that _RET_IP_ contains useful information.
     310             :  */
     311             : #define down_console_sem() do { \
     312             :         down(&console_sem);\
     313             :         mutex_acquire(&console_lock_dep_map, 0, 0, _RET_IP_);\
     314             : } while (0)
     315             : 
     316         811 : static int __down_trylock_console_sem(unsigned long ip)
     317             : {
     318             :         int lock_failed;
     319             :         unsigned long flags;
     320             : 
     321             :         /*
     322             :          * Here and in __up_console_sem() we need to be in safe mode,
     323             :          * because spindump/WARN/etc from under console ->lock will
     324             :          * deadlock in printk()->down_trylock_console_sem() otherwise.
     325             :          */
     326         811 :         printk_safe_enter_irqsave(flags);
     327         811 :         lock_failed = down_trylock(&console_sem);
     328        1622 :         printk_safe_exit_irqrestore(flags);
     329             : 
     330         811 :         if (lock_failed)
     331             :                 return 1;
     332             :         mutex_acquire(&console_lock_dep_map, 0, 1, ip);
     333             :         return 0;
     334             : }
     335             : #define down_trylock_console_sem() __down_trylock_console_sem(_RET_IP_)
     336             : 
     337         811 : static void __up_console_sem(unsigned long ip)
     338             : {
     339             :         unsigned long flags;
     340             : 
     341             :         mutex_release(&console_lock_dep_map, ip);
     342             : 
     343         811 :         printk_safe_enter_irqsave(flags);
     344         811 :         up(&console_sem);
     345        1622 :         printk_safe_exit_irqrestore(flags);
     346         811 : }
     347             : #define up_console_sem() __up_console_sem(_RET_IP_)
     348             : 
     349             : static bool panic_in_progress(void)
     350             : {
     351        1388 :         return unlikely(atomic_read(&panic_cpu) != PANIC_CPU_INVALID);
     352             : }
     353             : 
     354             : /*
     355             :  * This is used for debugging the mess that is the VT code by
     356             :  * keeping track if we have the console semaphore held. It's
     357             :  * definitely not the perfect debug tool (we don't know if _WE_
     358             :  * hold it and are racing, but it helps tracking those weird code
     359             :  * paths in the console code where we end up in places I want
     360             :  * locked without the console semaphore held).
     361             :  */
     362             : static int console_locked, console_suspended;
     363             : 
     364             : /*
     365             :  *      Array of consoles built from command line options (console=)
     366             :  */
     367             : 
     368             : #define MAX_CMDLINECONSOLES 8
     369             : 
     370             : static struct console_cmdline console_cmdline[MAX_CMDLINECONSOLES];
     371             : 
     372             : static int preferred_console = -1;
     373             : int console_set_on_cmdline;
     374             : EXPORT_SYMBOL(console_set_on_cmdline);
     375             : 
     376             : /* Flag: console code may call schedule() */
     377             : static int console_may_schedule;
     378             : 
     379             : enum con_msg_format_flags {
     380             :         MSG_FORMAT_DEFAULT      = 0,
     381             :         MSG_FORMAT_SYSLOG       = (1 << 0),
     382             : };
     383             : 
     384             : static int console_msg_format = MSG_FORMAT_DEFAULT;
     385             : 
     386             : /*
     387             :  * The printk log buffer consists of a sequenced collection of records, each
     388             :  * containing variable length message text. Every record also contains its
     389             :  * own meta-data (@info).
     390             :  *
     391             :  * Every record meta-data carries the timestamp in microseconds, as well as
     392             :  * the standard userspace syslog level and syslog facility. The usual kernel
     393             :  * messages use LOG_KERN; userspace-injected messages always carry a matching
     394             :  * syslog facility, by default LOG_USER. The origin of every message can be
     395             :  * reliably determined that way.
     396             :  *
     397             :  * The human readable log message of a record is available in @text, the
     398             :  * length of the message text in @text_len. The stored message is not
     399             :  * terminated.
     400             :  *
     401             :  * Optionally, a record can carry a dictionary of properties (key/value
     402             :  * pairs), to provide userspace with a machine-readable message context.
     403             :  *
     404             :  * Examples for well-defined, commonly used property names are:
     405             :  *   DEVICE=b12:8               device identifier
     406             :  *                                b12:8         block dev_t
     407             :  *                                c127:3        char dev_t
     408             :  *                                n8            netdev ifindex
     409             :  *                                +sound:card0  subsystem:devname
     410             :  *   SUBSYSTEM=pci              driver-core subsystem name
     411             :  *
     412             :  * Valid characters in property names are [a-zA-Z0-9.-_]. Property names
     413             :  * and values are terminated by a '\0' character.
     414             :  *
     415             :  * Example of record values:
     416             :  *   record.text_buf                = "it's a line" (unterminated)
     417             :  *   record.info.seq                = 56
     418             :  *   record.info.ts_nsec            = 36863
     419             :  *   record.info.text_len           = 11
     420             :  *   record.info.facility           = 0 (LOG_KERN)
     421             :  *   record.info.flags              = 0
     422             :  *   record.info.level              = 3 (LOG_ERR)
     423             :  *   record.info.caller_id          = 299 (task 299)
     424             :  *   record.info.dev_info.subsystem = "pci" (terminated)
     425             :  *   record.info.dev_info.device    = "+pci:0000:00:01.0" (terminated)
     426             :  *
     427             :  * The 'struct printk_info' buffer must never be directly exported to
     428             :  * userspace, it is a kernel-private implementation detail that might
     429             :  * need to be changed in the future, when the requirements change.
     430             :  *
     431             :  * /dev/kmsg exports the structured data in the following line format:
     432             :  *   "<level>,<sequnum>,<timestamp>,<contflag>[,additional_values, ... ];<message text>\n"
     433             :  *
     434             :  * Users of the export format should ignore possible additional values
     435             :  * separated by ',', and find the message after the ';' character.
     436             :  *
     437             :  * The optional key/value pairs are attached as continuation lines starting
     438             :  * with a space character and terminated by a newline. All possible
     439             :  * non-prinatable characters are escaped in the "\xff" notation.
     440             :  */
     441             : 
     442             : /* syslog_lock protects syslog_* variables and write access to clear_seq. */
     443             : static DEFINE_MUTEX(syslog_lock);
     444             : 
     445             : #ifdef CONFIG_PRINTK
     446             : DECLARE_WAIT_QUEUE_HEAD(log_wait);
     447             : /* All 3 protected by @syslog_lock. */
     448             : /* the next printk record to read by syslog(READ) or /proc/kmsg */
     449             : static u64 syslog_seq;
     450             : static size_t syslog_partial;
     451             : static bool syslog_time;
     452             : 
     453             : struct latched_seq {
     454             :         seqcount_latch_t        latch;
     455             :         u64                     val[2];
     456             : };
     457             : 
     458             : /*
     459             :  * The next printk record to read after the last 'clear' command. There are
     460             :  * two copies (updated with seqcount_latch) so that reads can locklessly
     461             :  * access a valid value. Writers are synchronized by @syslog_lock.
     462             :  */
     463             : static struct latched_seq clear_seq = {
     464             :         .latch          = SEQCNT_LATCH_ZERO(clear_seq.latch),
     465             :         .val[0]         = 0,
     466             :         .val[1]         = 0,
     467             : };
     468             : 
     469             : #define LOG_LEVEL(v)            ((v) & 0x07)
     470             : #define LOG_FACILITY(v)         ((v) >> 3 & 0xff)
     471             : 
     472             : /* record buffer */
     473             : #define LOG_ALIGN __alignof__(unsigned long)
     474             : #define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)
     475             : #define LOG_BUF_LEN_MAX (u32)(1 << 31)
     476             : static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN);
     477             : static char *log_buf = __log_buf;
     478             : static u32 log_buf_len = __LOG_BUF_LEN;
     479             : 
     480             : /*
     481             :  * Define the average message size. This only affects the number of
     482             :  * descriptors that will be available. Underestimating is better than
     483             :  * overestimating (too many available descriptors is better than not enough).
     484             :  */
     485             : #define PRB_AVGBITS 5   /* 32 character average length */
     486             : 
     487             : #if CONFIG_LOG_BUF_SHIFT <= PRB_AVGBITS
     488             : #error CONFIG_LOG_BUF_SHIFT value too small.
     489             : #endif
     490             : _DEFINE_PRINTKRB(printk_rb_static, CONFIG_LOG_BUF_SHIFT - PRB_AVGBITS,
     491             :                  PRB_AVGBITS, &__log_buf[0]);
     492             : 
     493             : static struct printk_ringbuffer printk_rb_dynamic;
     494             : 
     495             : static struct printk_ringbuffer *prb = &printk_rb_static;
     496             : 
     497             : /*
     498             :  * We cannot access per-CPU data (e.g. per-CPU flush irq_work) before
     499             :  * per_cpu_areas are initialised. This variable is set to true when
     500             :  * it's safe to access per-CPU data.
     501             :  */
     502             : static bool __printk_percpu_data_ready __ro_after_init;
     503             : 
     504           0 : bool printk_percpu_data_ready(void)
     505             : {
     506        1622 :         return __printk_percpu_data_ready;
     507             : }
     508             : 
     509             : /* Must be called under syslog_lock. */
     510             : static void latched_seq_write(struct latched_seq *ls, u64 val)
     511             : {
     512           0 :         raw_write_seqcount_latch(&ls->latch);
     513           0 :         ls->val[0] = val;
     514           0 :         raw_write_seqcount_latch(&ls->latch);
     515           0 :         ls->val[1] = val;
     516             : }
     517             : 
     518             : /* Can be called from any context. */
     519             : static u64 latched_seq_read_nolock(struct latched_seq *ls)
     520             : {
     521             :         unsigned int seq;
     522             :         unsigned int idx;
     523             :         u64 val;
     524             : 
     525             :         do {
     526           0 :                 seq = raw_read_seqcount_latch(&ls->latch);
     527           0 :                 idx = seq & 0x1;
     528           0 :                 val = ls->val[idx];
     529           0 :         } while (read_seqcount_latch_retry(&ls->latch, seq));
     530             : 
     531             :         return val;
     532             : }
     533             : 
     534             : /* Return log buffer address */
     535           0 : char *log_buf_addr_get(void)
     536             : {
     537           0 :         return log_buf;
     538             : }
     539             : 
     540             : /* Return log buffer size */
     541           0 : u32 log_buf_len_get(void)
     542             : {
     543           0 :         return log_buf_len;
     544             : }
     545             : 
     546             : /*
     547             :  * Define how much of the log buffer we could take at maximum. The value
     548             :  * must be greater than two. Note that only half of the buffer is available
     549             :  * when the index points to the middle.
     550             :  */
     551             : #define MAX_LOG_TAKE_PART 4
     552             : static const char trunc_msg[] = "<truncated>";
     553             : 
     554           0 : static void truncate_msg(u16 *text_len, u16 *trunc_msg_len)
     555             : {
     556             :         /*
     557             :          * The message should not take the whole buffer. Otherwise, it might
     558             :          * get removed too soon.
     559             :          */
     560           0 :         u32 max_text_len = log_buf_len / MAX_LOG_TAKE_PART;
     561             : 
     562           0 :         if (*text_len > max_text_len)
     563           0 :                 *text_len = max_text_len;
     564             : 
     565             :         /* enable the warning message (if there is room) */
     566           0 :         *trunc_msg_len = strlen(trunc_msg);
     567           0 :         if (*text_len >= *trunc_msg_len)
     568           0 :                 *text_len -= *trunc_msg_len;
     569             :         else
     570           0 :                 *trunc_msg_len = 0;
     571           0 : }
     572             : 
     573             : int dmesg_restrict = IS_ENABLED(CONFIG_SECURITY_DMESG_RESTRICT);
     574             : 
     575             : static int syslog_action_restricted(int type)
     576             : {
     577           0 :         if (dmesg_restrict)
     578             :                 return 1;
     579             :         /*
     580             :          * Unless restricted, we allow "read all" and "get buffer size"
     581             :          * for everybody.
     582             :          */
     583           0 :         return type != SYSLOG_ACTION_READ_ALL &&
     584           0 :                type != SYSLOG_ACTION_SIZE_BUFFER;
     585             : }
     586             : 
     587           0 : static int check_syslog_permissions(int type, int source)
     588             : {
     589             :         /*
     590             :          * If this is from /proc/kmsg and we've already opened it, then we've
     591             :          * already done the capabilities checks at open time.
     592             :          */
     593           0 :         if (source == SYSLOG_FROM_PROC && type != SYSLOG_ACTION_OPEN)
     594             :                 goto ok;
     595             : 
     596           0 :         if (syslog_action_restricted(type)) {
     597           0 :                 if (capable(CAP_SYSLOG))
     598             :                         goto ok;
     599             :                 /*
     600             :                  * For historical reasons, accept CAP_SYS_ADMIN too, with
     601             :                  * a warning.
     602             :                  */
     603           0 :                 if (capable(CAP_SYS_ADMIN)) {
     604           0 :                         pr_warn_once("%s (%d): Attempt to access syslog with "
     605             :                                      "CAP_SYS_ADMIN but no CAP_SYSLOG "
     606             :                                      "(deprecated).\n",
     607             :                                  current->comm, task_pid_nr(current));
     608             :                         goto ok;
     609             :                 }
     610             :                 return -EPERM;
     611             :         }
     612             : ok:
     613             :         return security_syslog(type);
     614             : }
     615             : 
     616             : static void append_char(char **pp, char *e, char c)
     617             : {
     618           0 :         if (*pp < e)
     619           0 :                 *(*pp)++ = c;
     620             : }
     621             : 
     622           0 : static ssize_t info_print_ext_header(char *buf, size_t size,
     623             :                                      struct printk_info *info)
     624             : {
     625           0 :         u64 ts_usec = info->ts_nsec;
     626             :         char caller[20];
     627             : #ifdef CONFIG_PRINTK_CALLER
     628             :         u32 id = info->caller_id;
     629             : 
     630             :         snprintf(caller, sizeof(caller), ",caller=%c%u",
     631             :                  id & 0x80000000 ? 'C' : 'T', id & ~0x80000000);
     632             : #else
     633           0 :         caller[0] = '\0';
     634             : #endif
     635             : 
     636           0 :         do_div(ts_usec, 1000);
     637             : 
     638           0 :         return scnprintf(buf, size, "%u,%llu,%llu,%c%s;",
     639           0 :                          (info->facility << 3) | info->level, info->seq,
     640           0 :                          ts_usec, info->flags & LOG_CONT ? 'c' : '-', caller);
     641             : }
     642             : 
     643           0 : static ssize_t msg_add_ext_text(char *buf, size_t size,
     644             :                                 const char *text, size_t text_len,
     645             :                                 unsigned char endc)
     646             : {
     647           0 :         char *p = buf, *e = buf + size;
     648             :         size_t i;
     649             : 
     650             :         /* escape non-printable characters */
     651           0 :         for (i = 0; i < text_len; i++) {
     652           0 :                 unsigned char c = text[i];
     653             : 
     654           0 :                 if (c < ' ' || c >= 127 || c == '\\')
     655           0 :                         p += scnprintf(p, e - p, "\\x%02x", c);
     656             :                 else
     657           0 :                         append_char(&p, e, c);
     658             :         }
     659           0 :         append_char(&p, e, endc);
     660             : 
     661           0 :         return p - buf;
     662             : }
     663             : 
     664           0 : static ssize_t msg_add_dict_text(char *buf, size_t size,
     665             :                                  const char *key, const char *val)
     666             : {
     667           0 :         size_t val_len = strlen(val);
     668             :         ssize_t len;
     669             : 
     670           0 :         if (!val_len)
     671             :                 return 0;
     672             : 
     673           0 :         len = msg_add_ext_text(buf, size, "", 0, ' ');        /* dict prefix */
     674           0 :         len += msg_add_ext_text(buf + len, size - len, key, strlen(key), '=');
     675           0 :         len += msg_add_ext_text(buf + len, size - len, val, val_len, '\n');
     676             : 
     677           0 :         return len;
     678             : }
     679             : 
     680           0 : static ssize_t msg_print_ext_body(char *buf, size_t size,
     681             :                                   char *text, size_t text_len,
     682             :                                   struct dev_printk_info *dev_info)
     683             : {
     684             :         ssize_t len;
     685             : 
     686           0 :         len = msg_add_ext_text(buf, size, text, text_len, '\n');
     687             : 
     688           0 :         if (!dev_info)
     689             :                 goto out;
     690             : 
     691           0 :         len += msg_add_dict_text(buf + len, size - len, "SUBSYSTEM",
     692           0 :                                  dev_info->subsystem);
     693           0 :         len += msg_add_dict_text(buf + len, size - len, "DEVICE",
     694           0 :                                  dev_info->device);
     695             : out:
     696           0 :         return len;
     697             : }
     698             : 
     699             : static bool printk_get_next_message(struct printk_message *pmsg, u64 seq,
     700             :                                     bool is_extended, bool may_supress);
     701             : 
     702             : /* /dev/kmsg - userspace message inject/listen interface */
     703             : struct devkmsg_user {
     704             :         atomic64_t seq;
     705             :         struct ratelimit_state rs;
     706             :         struct mutex lock;
     707             :         struct printk_buffers pbufs;
     708             : };
     709             : 
     710             : static __printf(3, 4) __cold
     711           0 : int devkmsg_emit(int facility, int level, const char *fmt, ...)
     712             : {
     713             :         va_list args;
     714             :         int r;
     715             : 
     716           0 :         va_start(args, fmt);
     717           0 :         r = vprintk_emit(facility, level, NULL, fmt, args);
     718           0 :         va_end(args);
     719             : 
     720           0 :         return r;
     721             : }
     722             : 
     723           0 : static ssize_t devkmsg_write(struct kiocb *iocb, struct iov_iter *from)
     724             : {
     725             :         char *buf, *line;
     726           0 :         int level = default_message_loglevel;
     727           0 :         int facility = 1;       /* LOG_USER */
     728           0 :         struct file *file = iocb->ki_filp;
     729           0 :         struct devkmsg_user *user = file->private_data;
     730           0 :         size_t len = iov_iter_count(from);
     731           0 :         ssize_t ret = len;
     732             : 
     733           0 :         if (!user || len > PRINTKRB_RECORD_MAX)
     734             :                 return -EINVAL;
     735             : 
     736             :         /* Ignore when user logging is disabled. */
     737           0 :         if (devkmsg_log & DEVKMSG_LOG_MASK_OFF)
     738             :                 return len;
     739             : 
     740             :         /* Ratelimit when not explicitly enabled. */
     741           0 :         if (!(devkmsg_log & DEVKMSG_LOG_MASK_ON)) {
     742           0 :                 if (!___ratelimit(&user->rs, current->comm))
     743             :                         return ret;
     744             :         }
     745             : 
     746           0 :         buf = kmalloc(len+1, GFP_KERNEL);
     747           0 :         if (buf == NULL)
     748             :                 return -ENOMEM;
     749             : 
     750           0 :         buf[len] = '\0';
     751           0 :         if (!copy_from_iter_full(buf, len, from)) {
     752           0 :                 kfree(buf);
     753           0 :                 return -EFAULT;
     754             :         }
     755             : 
     756             :         /*
     757             :          * Extract and skip the syslog prefix <[0-9]*>. Coming from userspace
     758             :          * the decimal value represents 32bit, the lower 3 bit are the log
     759             :          * level, the rest are the log facility.
     760             :          *
     761             :          * If no prefix or no userspace facility is specified, we
     762             :          * enforce LOG_USER, to be able to reliably distinguish
     763             :          * kernel-generated messages from userspace-injected ones.
     764             :          */
     765           0 :         line = buf;
     766           0 :         if (line[0] == '<') {
     767           0 :                 char *endp = NULL;
     768             :                 unsigned int u;
     769             : 
     770           0 :                 u = simple_strtoul(line + 1, &endp, 10);
     771           0 :                 if (endp && endp[0] == '>') {
     772           0 :                         level = LOG_LEVEL(u);
     773           0 :                         if (LOG_FACILITY(u) != 0)
     774           0 :                                 facility = LOG_FACILITY(u);
     775           0 :                         endp++;
     776           0 :                         line = endp;
     777             :                 }
     778             :         }
     779             : 
     780           0 :         devkmsg_emit(facility, level, "%s", line);
     781           0 :         kfree(buf);
     782           0 :         return ret;
     783             : }
     784             : 
     785           0 : static ssize_t devkmsg_read(struct file *file, char __user *buf,
     786             :                             size_t count, loff_t *ppos)
     787             : {
     788           0 :         struct devkmsg_user *user = file->private_data;
     789           0 :         char *outbuf = &user->pbufs.outbuf[0];
     790           0 :         struct printk_message pmsg = {
     791           0 :                 .pbufs = &user->pbufs,
     792             :         };
     793             :         ssize_t ret;
     794             : 
     795           0 :         if (!user)
     796             :                 return -EBADF;
     797             : 
     798           0 :         ret = mutex_lock_interruptible(&user->lock);
     799           0 :         if (ret)
     800             :                 return ret;
     801             : 
     802           0 :         if (!printk_get_next_message(&pmsg, atomic64_read(&user->seq), true, false)) {
     803           0 :                 if (file->f_flags & O_NONBLOCK) {
     804             :                         ret = -EAGAIN;
     805             :                         goto out;
     806             :                 }
     807             : 
     808             :                 /*
     809             :                  * Guarantee this task is visible on the waitqueue before
     810             :                  * checking the wake condition.
     811             :                  *
     812             :                  * The full memory barrier within set_current_state() of
     813             :                  * prepare_to_wait_event() pairs with the full memory barrier
     814             :                  * within wq_has_sleeper().
     815             :                  *
     816             :                  * This pairs with __wake_up_klogd:A.
     817             :                  */
     818           0 :                 ret = wait_event_interruptible(log_wait,
     819             :                                 printk_get_next_message(&pmsg, atomic64_read(&user->seq), true,
     820             :                                                         false)); /* LMM(devkmsg_read:A) */
     821           0 :                 if (ret)
     822             :                         goto out;
     823             :         }
     824             : 
     825           0 :         if (pmsg.dropped) {
     826             :                 /* our last seen message is gone, return error and reset */
     827           0 :                 atomic64_set(&user->seq, pmsg.seq);
     828           0 :                 ret = -EPIPE;
     829           0 :                 goto out;
     830             :         }
     831             : 
     832           0 :         atomic64_set(&user->seq, pmsg.seq + 1);
     833             : 
     834           0 :         if (pmsg.outbuf_len > count) {
     835             :                 ret = -EINVAL;
     836             :                 goto out;
     837             :         }
     838             : 
     839           0 :         if (copy_to_user(buf, outbuf, pmsg.outbuf_len)) {
     840             :                 ret = -EFAULT;
     841             :                 goto out;
     842             :         }
     843           0 :         ret = pmsg.outbuf_len;
     844             : out:
     845           0 :         mutex_unlock(&user->lock);
     846           0 :         return ret;
     847             : }
     848             : 
     849             : /*
     850             :  * Be careful when modifying this function!!!
     851             :  *
     852             :  * Only few operations are supported because the device works only with the
     853             :  * entire variable length messages (records). Non-standard values are
     854             :  * returned in the other cases and has been this way for quite some time.
     855             :  * User space applications might depend on this behavior.
     856             :  */
     857           0 : static loff_t devkmsg_llseek(struct file *file, loff_t offset, int whence)
     858             : {
     859           0 :         struct devkmsg_user *user = file->private_data;
     860           0 :         loff_t ret = 0;
     861             : 
     862           0 :         if (!user)
     863             :                 return -EBADF;
     864           0 :         if (offset)
     865             :                 return -ESPIPE;
     866             : 
     867           0 :         switch (whence) {
     868             :         case SEEK_SET:
     869             :                 /* the first record */
     870           0 :                 atomic64_set(&user->seq, prb_first_valid_seq(prb));
     871             :                 break;
     872             :         case SEEK_DATA:
     873             :                 /*
     874             :                  * The first record after the last SYSLOG_ACTION_CLEAR,
     875             :                  * like issued by 'dmesg -c'. Reading /dev/kmsg itself
     876             :                  * changes no global state, and does not clear anything.
     877             :                  */
     878           0 :                 atomic64_set(&user->seq, latched_seq_read_nolock(&clear_seq));
     879             :                 break;
     880             :         case SEEK_END:
     881             :                 /* after the last record */
     882           0 :                 atomic64_set(&user->seq, prb_next_seq(prb));
     883             :                 break;
     884             :         default:
     885             :                 ret = -EINVAL;
     886             :         }
     887             :         return ret;
     888             : }
     889             : 
     890           0 : static __poll_t devkmsg_poll(struct file *file, poll_table *wait)
     891             : {
     892           0 :         struct devkmsg_user *user = file->private_data;
     893             :         struct printk_info info;
     894           0 :         __poll_t ret = 0;
     895             : 
     896           0 :         if (!user)
     897             :                 return EPOLLERR|EPOLLNVAL;
     898             : 
     899           0 :         poll_wait(file, &log_wait, wait);
     900             : 
     901           0 :         if (prb_read_valid_info(prb, atomic64_read(&user->seq), &info, NULL)) {
     902             :                 /* return error when data has vanished underneath us */
     903           0 :                 if (info.seq != atomic64_read(&user->seq))
     904             :                         ret = EPOLLIN|EPOLLRDNORM|EPOLLERR|EPOLLPRI;
     905             :                 else
     906           0 :                         ret = EPOLLIN|EPOLLRDNORM;
     907             :         }
     908             : 
     909             :         return ret;
     910             : }
     911             : 
     912           0 : static int devkmsg_open(struct inode *inode, struct file *file)
     913             : {
     914             :         struct devkmsg_user *user;
     915             :         int err;
     916             : 
     917           0 :         if (devkmsg_log & DEVKMSG_LOG_MASK_OFF)
     918             :                 return -EPERM;
     919             : 
     920             :         /* write-only does not need any file context */
     921           0 :         if ((file->f_flags & O_ACCMODE) != O_WRONLY) {
     922           0 :                 err = check_syslog_permissions(SYSLOG_ACTION_READ_ALL,
     923             :                                                SYSLOG_FROM_READER);
     924           0 :                 if (err)
     925             :                         return err;
     926             :         }
     927             : 
     928           0 :         user = kvmalloc(sizeof(struct devkmsg_user), GFP_KERNEL);
     929           0 :         if (!user)
     930             :                 return -ENOMEM;
     931             : 
     932           0 :         ratelimit_default_init(&user->rs);
     933           0 :         ratelimit_set_flags(&user->rs, RATELIMIT_MSG_ON_RELEASE);
     934             : 
     935           0 :         mutex_init(&user->lock);
     936             : 
     937           0 :         atomic64_set(&user->seq, prb_first_valid_seq(prb));
     938             : 
     939           0 :         file->private_data = user;
     940           0 :         return 0;
     941             : }
     942             : 
     943           0 : static int devkmsg_release(struct inode *inode, struct file *file)
     944             : {
     945           0 :         struct devkmsg_user *user = file->private_data;
     946             : 
     947           0 :         if (!user)
     948             :                 return 0;
     949             : 
     950           0 :         ratelimit_state_exit(&user->rs);
     951             : 
     952           0 :         mutex_destroy(&user->lock);
     953           0 :         kvfree(user);
     954           0 :         return 0;
     955             : }
     956             : 
     957             : const struct file_operations kmsg_fops = {
     958             :         .open = devkmsg_open,
     959             :         .read = devkmsg_read,
     960             :         .write_iter = devkmsg_write,
     961             :         .llseek = devkmsg_llseek,
     962             :         .poll = devkmsg_poll,
     963             :         .release = devkmsg_release,
     964             : };
     965             : 
     966             : #ifdef CONFIG_CRASH_CORE
     967             : /*
     968             :  * This appends the listed symbols to /proc/vmcore
     969             :  *
     970             :  * /proc/vmcore is used by various utilities, like crash and makedumpfile to
     971             :  * obtain access to symbols that are otherwise very difficult to locate.  These
     972             :  * symbols are specifically used so that utilities can access and extract the
     973             :  * dmesg log from a vmcore file after a crash.
     974             :  */
     975             : void log_buf_vmcoreinfo_setup(void)
     976             : {
     977             :         struct dev_printk_info *dev_info = NULL;
     978             : 
     979             :         VMCOREINFO_SYMBOL(prb);
     980             :         VMCOREINFO_SYMBOL(printk_rb_static);
     981             :         VMCOREINFO_SYMBOL(clear_seq);
     982             : 
     983             :         /*
     984             :          * Export struct size and field offsets. User space tools can
     985             :          * parse it and detect any changes to structure down the line.
     986             :          */
     987             : 
     988             :         VMCOREINFO_STRUCT_SIZE(printk_ringbuffer);
     989             :         VMCOREINFO_OFFSET(printk_ringbuffer, desc_ring);
     990             :         VMCOREINFO_OFFSET(printk_ringbuffer, text_data_ring);
     991             :         VMCOREINFO_OFFSET(printk_ringbuffer, fail);
     992             : 
     993             :         VMCOREINFO_STRUCT_SIZE(prb_desc_ring);
     994             :         VMCOREINFO_OFFSET(prb_desc_ring, count_bits);
     995             :         VMCOREINFO_OFFSET(prb_desc_ring, descs);
     996             :         VMCOREINFO_OFFSET(prb_desc_ring, infos);
     997             :         VMCOREINFO_OFFSET(prb_desc_ring, head_id);
     998             :         VMCOREINFO_OFFSET(prb_desc_ring, tail_id);
     999             : 
    1000             :         VMCOREINFO_STRUCT_SIZE(prb_desc);
    1001             :         VMCOREINFO_OFFSET(prb_desc, state_var);
    1002             :         VMCOREINFO_OFFSET(prb_desc, text_blk_lpos);
    1003             : 
    1004             :         VMCOREINFO_STRUCT_SIZE(prb_data_blk_lpos);
    1005             :         VMCOREINFO_OFFSET(prb_data_blk_lpos, begin);
    1006             :         VMCOREINFO_OFFSET(prb_data_blk_lpos, next);
    1007             : 
    1008             :         VMCOREINFO_STRUCT_SIZE(printk_info);
    1009             :         VMCOREINFO_OFFSET(printk_info, seq);
    1010             :         VMCOREINFO_OFFSET(printk_info, ts_nsec);
    1011             :         VMCOREINFO_OFFSET(printk_info, text_len);
    1012             :         VMCOREINFO_OFFSET(printk_info, caller_id);
    1013             :         VMCOREINFO_OFFSET(printk_info, dev_info);
    1014             : 
    1015             :         VMCOREINFO_STRUCT_SIZE(dev_printk_info);
    1016             :         VMCOREINFO_OFFSET(dev_printk_info, subsystem);
    1017             :         VMCOREINFO_LENGTH(printk_info_subsystem, sizeof(dev_info->subsystem));
    1018             :         VMCOREINFO_OFFSET(dev_printk_info, device);
    1019             :         VMCOREINFO_LENGTH(printk_info_device, sizeof(dev_info->device));
    1020             : 
    1021             :         VMCOREINFO_STRUCT_SIZE(prb_data_ring);
    1022             :         VMCOREINFO_OFFSET(prb_data_ring, size_bits);
    1023             :         VMCOREINFO_OFFSET(prb_data_ring, data);
    1024             :         VMCOREINFO_OFFSET(prb_data_ring, head_lpos);
    1025             :         VMCOREINFO_OFFSET(prb_data_ring, tail_lpos);
    1026             : 
    1027             :         VMCOREINFO_SIZE(atomic_long_t);
    1028             :         VMCOREINFO_TYPE_OFFSET(atomic_long_t, counter);
    1029             : 
    1030             :         VMCOREINFO_STRUCT_SIZE(latched_seq);
    1031             :         VMCOREINFO_OFFSET(latched_seq, val);
    1032             : }
    1033             : #endif
    1034             : 
    1035             : /* requested log_buf_len from kernel cmdline */
    1036             : static unsigned long __initdata new_log_buf_len;
    1037             : 
    1038             : /* we practice scaling the ring buffer by powers of 2 */
    1039           0 : static void __init log_buf_len_update(u64 size)
    1040             : {
    1041           0 :         if (size > (u64)LOG_BUF_LEN_MAX) {
    1042           0 :                 size = (u64)LOG_BUF_LEN_MAX;
    1043           0 :                 pr_err("log_buf over 2G is not supported.\n");
    1044             :         }
    1045             : 
    1046           0 :         if (size)
    1047           0 :                 size = roundup_pow_of_two(size);
    1048           0 :         if (size > log_buf_len)
    1049           0 :                 new_log_buf_len = (unsigned long)size;
    1050           0 : }
    1051             : 
    1052             : /* save requested log_buf_len since it's too early to process it */
    1053           0 : static int __init log_buf_len_setup(char *str)
    1054             : {
    1055             :         u64 size;
    1056             : 
    1057           0 :         if (!str)
    1058             :                 return -EINVAL;
    1059             : 
    1060           0 :         size = memparse(str, &str);
    1061             : 
    1062           0 :         log_buf_len_update(size);
    1063             : 
    1064           0 :         return 0;
    1065             : }
    1066             : early_param("log_buf_len", log_buf_len_setup);
    1067             : 
    1068             : #ifdef CONFIG_SMP
    1069             : #define __LOG_CPU_MAX_BUF_LEN (1 << CONFIG_LOG_CPU_MAX_BUF_SHIFT)
    1070             : 
    1071             : static void __init log_buf_add_cpu(void)
    1072             : {
    1073             :         unsigned int cpu_extra;
    1074             : 
    1075             :         /*
    1076             :          * archs should set up cpu_possible_bits properly with
    1077             :          * set_cpu_possible() after setup_arch() but just in
    1078             :          * case lets ensure this is valid.
    1079             :          */
    1080             :         if (num_possible_cpus() == 1)
    1081             :                 return;
    1082             : 
    1083             :         cpu_extra = (num_possible_cpus() - 1) * __LOG_CPU_MAX_BUF_LEN;
    1084             : 
    1085             :         /* by default this will only continue through for large > 64 CPUs */
    1086             :         if (cpu_extra <= __LOG_BUF_LEN / 2)
    1087             :                 return;
    1088             : 
    1089             :         pr_info("log_buf_len individual max cpu contribution: %d bytes\n",
    1090             :                 __LOG_CPU_MAX_BUF_LEN);
    1091             :         pr_info("log_buf_len total cpu_extra contributions: %d bytes\n",
    1092             :                 cpu_extra);
    1093             :         pr_info("log_buf_len min size: %d bytes\n", __LOG_BUF_LEN);
    1094             : 
    1095             :         log_buf_len_update(cpu_extra + __LOG_BUF_LEN);
    1096             : }
    1097             : #else /* !CONFIG_SMP */
    1098             : static inline void log_buf_add_cpu(void) {}
    1099             : #endif /* CONFIG_SMP */
    1100             : 
    1101             : static void __init set_percpu_data_ready(void)
    1102             : {
    1103           1 :         __printk_percpu_data_ready = true;
    1104             : }
    1105             : 
    1106           0 : static unsigned int __init add_to_rb(struct printk_ringbuffer *rb,
    1107             :                                      struct printk_record *r)
    1108             : {
    1109             :         struct prb_reserved_entry e;
    1110             :         struct printk_record dest_r;
    1111             : 
    1112           0 :         prb_rec_init_wr(&dest_r, r->info->text_len);
    1113             : 
    1114           0 :         if (!prb_reserve(&e, rb, &dest_r))
    1115             :                 return 0;
    1116             : 
    1117           0 :         memcpy(&dest_r.text_buf[0], &r->text_buf[0], r->info->text_len);
    1118           0 :         dest_r.info->text_len = r->info->text_len;
    1119           0 :         dest_r.info->facility = r->info->facility;
    1120           0 :         dest_r.info->level = r->info->level;
    1121           0 :         dest_r.info->flags = r->info->flags;
    1122           0 :         dest_r.info->ts_nsec = r->info->ts_nsec;
    1123           0 :         dest_r.info->caller_id = r->info->caller_id;
    1124           0 :         memcpy(&dest_r.info->dev_info, &r->info->dev_info, sizeof(dest_r.info->dev_info));
    1125             : 
    1126           0 :         prb_final_commit(&e);
    1127             : 
    1128           0 :         return prb_record_text_space(&e);
    1129             : }
    1130             : 
    1131             : static char setup_text_buf[PRINTKRB_RECORD_MAX] __initdata;
    1132             : 
    1133           1 : void __init setup_log_buf(int early)
    1134             : {
    1135             :         struct printk_info *new_infos;
    1136             :         unsigned int new_descs_count;
    1137             :         struct prb_desc *new_descs;
    1138             :         struct printk_info info;
    1139             :         struct printk_record r;
    1140             :         unsigned int text_size;
    1141             :         size_t new_descs_size;
    1142             :         size_t new_infos_size;
    1143             :         unsigned long flags;
    1144             :         char *new_log_buf;
    1145             :         unsigned int free;
    1146             :         u64 seq;
    1147             : 
    1148             :         /*
    1149             :          * Some archs call setup_log_buf() multiple times - first is very
    1150             :          * early, e.g. from setup_arch(), and second - when percpu_areas
    1151             :          * are initialised.
    1152             :          */
    1153           1 :         if (!early)
    1154             :                 set_percpu_data_ready();
    1155             : 
    1156           1 :         if (log_buf != __log_buf)
    1157           1 :                 return;
    1158             : 
    1159             :         if (!early && !new_log_buf_len)
    1160             :                 log_buf_add_cpu();
    1161             : 
    1162           1 :         if (!new_log_buf_len)
    1163             :                 return;
    1164             : 
    1165           0 :         new_descs_count = new_log_buf_len >> PRB_AVGBITS;
    1166           0 :         if (new_descs_count == 0) {
    1167           0 :                 pr_err("new_log_buf_len: %lu too small\n", new_log_buf_len);
    1168           0 :                 return;
    1169             :         }
    1170             : 
    1171           0 :         new_log_buf = memblock_alloc(new_log_buf_len, LOG_ALIGN);
    1172           0 :         if (unlikely(!new_log_buf)) {
    1173           0 :                 pr_err("log_buf_len: %lu text bytes not available\n",
    1174             :                        new_log_buf_len);
    1175           0 :                 return;
    1176             :         }
    1177             : 
    1178           0 :         new_descs_size = new_descs_count * sizeof(struct prb_desc);
    1179           0 :         new_descs = memblock_alloc(new_descs_size, LOG_ALIGN);
    1180           0 :         if (unlikely(!new_descs)) {
    1181           0 :                 pr_err("log_buf_len: %zu desc bytes not available\n",
    1182             :                        new_descs_size);
    1183           0 :                 goto err_free_log_buf;
    1184             :         }
    1185             : 
    1186           0 :         new_infos_size = new_descs_count * sizeof(struct printk_info);
    1187           0 :         new_infos = memblock_alloc(new_infos_size, LOG_ALIGN);
    1188           0 :         if (unlikely(!new_infos)) {
    1189           0 :                 pr_err("log_buf_len: %zu info bytes not available\n",
    1190             :                        new_infos_size);
    1191             :                 goto err_free_descs;
    1192             :         }
    1193             : 
    1194           0 :         prb_rec_init_rd(&r, &info, &setup_text_buf[0], sizeof(setup_text_buf));
    1195             : 
    1196           0 :         prb_init(&printk_rb_dynamic,
    1197           0 :                  new_log_buf, ilog2(new_log_buf_len),
    1198           0 :                  new_descs, ilog2(new_descs_count),
    1199             :                  new_infos);
    1200             : 
    1201           0 :         local_irq_save(flags);
    1202             : 
    1203           0 :         log_buf_len = new_log_buf_len;
    1204           0 :         log_buf = new_log_buf;
    1205           0 :         new_log_buf_len = 0;
    1206             : 
    1207           0 :         free = __LOG_BUF_LEN;
    1208           0 :         prb_for_each_record(0, &printk_rb_static, seq, &r) {
    1209           0 :                 text_size = add_to_rb(&printk_rb_dynamic, &r);
    1210           0 :                 if (text_size > free)
    1211             :                         free = 0;
    1212             :                 else
    1213           0 :                         free -= text_size;
    1214             :         }
    1215             : 
    1216           0 :         prb = &printk_rb_dynamic;
    1217             : 
    1218           0 :         local_irq_restore(flags);
    1219             : 
    1220             :         /*
    1221             :          * Copy any remaining messages that might have appeared from
    1222             :          * NMI context after copying but before switching to the
    1223             :          * dynamic buffer.
    1224             :          */
    1225           0 :         prb_for_each_record(seq, &printk_rb_static, seq, &r) {
    1226           0 :                 text_size = add_to_rb(&printk_rb_dynamic, &r);
    1227           0 :                 if (text_size > free)
    1228             :                         free = 0;
    1229             :                 else
    1230           0 :                         free -= text_size;
    1231             :         }
    1232             : 
    1233           0 :         if (seq != prb_next_seq(&printk_rb_static)) {
    1234           0 :                 pr_err("dropped %llu messages\n",
    1235             :                        prb_next_seq(&printk_rb_static) - seq);
    1236             :         }
    1237             : 
    1238           0 :         pr_info("log_buf_len: %u bytes\n", log_buf_len);
    1239           0 :         pr_info("early log buf free: %u(%u%%)\n",
    1240             :                 free, (free * 100) / __LOG_BUF_LEN);
    1241           0 :         return;
    1242             : 
    1243             : err_free_descs:
    1244           0 :         memblock_free(new_descs, new_descs_size);
    1245             : err_free_log_buf:
    1246           0 :         memblock_free(new_log_buf, new_log_buf_len);
    1247             : }
    1248             : 
    1249             : static bool __read_mostly ignore_loglevel;
    1250             : 
    1251           0 : static int __init ignore_loglevel_setup(char *str)
    1252             : {
    1253           0 :         ignore_loglevel = true;
    1254           0 :         pr_info("debug: ignoring loglevel setting.\n");
    1255             : 
    1256           0 :         return 0;
    1257             : }
    1258             : 
    1259             : early_param("ignore_loglevel", ignore_loglevel_setup);
    1260             : module_param(ignore_loglevel, bool, S_IRUGO | S_IWUSR);
    1261             : MODULE_PARM_DESC(ignore_loglevel,
    1262             :                  "ignore loglevel setting (prints all kernel messages to the console)");
    1263             : 
    1264             : static bool suppress_message_printing(int level)
    1265             : {
    1266        1388 :         return (level >= console_loglevel && !ignore_loglevel);
    1267             : }
    1268             : 
    1269             : #ifdef CONFIG_BOOT_PRINTK_DELAY
    1270             : 
    1271             : static int boot_delay; /* msecs delay after each printk during bootup */
    1272             : static unsigned long long loops_per_msec;       /* based on boot_delay */
    1273             : 
    1274             : static int __init boot_delay_setup(char *str)
    1275             : {
    1276             :         unsigned long lpj;
    1277             : 
    1278             :         lpj = preset_lpj ? preset_lpj : 1000000;        /* some guess */
    1279             :         loops_per_msec = (unsigned long long)lpj / 1000 * HZ;
    1280             : 
    1281             :         get_option(&str, &boot_delay);
    1282             :         if (boot_delay > 10 * 1000)
    1283             :                 boot_delay = 0;
    1284             : 
    1285             :         pr_debug("boot_delay: %u, preset_lpj: %ld, lpj: %lu, "
    1286             :                 "HZ: %d, loops_per_msec: %llu\n",
    1287             :                 boot_delay, preset_lpj, lpj, HZ, loops_per_msec);
    1288             :         return 0;
    1289             : }
    1290             : early_param("boot_delay", boot_delay_setup);
    1291             : 
    1292             : static void boot_delay_msec(int level)
    1293             : {
    1294             :         unsigned long long k;
    1295             :         unsigned long timeout;
    1296             : 
    1297             :         if ((boot_delay == 0 || system_state >= SYSTEM_RUNNING)
    1298             :                 || suppress_message_printing(level)) {
    1299             :                 return;
    1300             :         }
    1301             : 
    1302             :         k = (unsigned long long)loops_per_msec * boot_delay;
    1303             : 
    1304             :         timeout = jiffies + msecs_to_jiffies(boot_delay);
    1305             :         while (k) {
    1306             :                 k--;
    1307             :                 cpu_relax();
    1308             :                 /*
    1309             :                  * use (volatile) jiffies to prevent
    1310             :                  * compiler reduction; loop termination via jiffies
    1311             :                  * is secondary and may or may not happen.
    1312             :                  */
    1313             :                 if (time_after(jiffies, timeout))
    1314             :                         break;
    1315             :                 touch_nmi_watchdog();
    1316             :         }
    1317             : }
    1318             : #else
    1319             : static inline void boot_delay_msec(int level)
    1320             : {
    1321             : }
    1322             : #endif
    1323             : 
    1324             : static bool printk_time = IS_ENABLED(CONFIG_PRINTK_TIME);
    1325             : module_param_named(time, printk_time, bool, S_IRUGO | S_IWUSR);
    1326             : 
    1327             : static size_t print_syslog(unsigned int level, char *buf)
    1328             : {
    1329           0 :         return sprintf(buf, "<%u>", level);
    1330             : }
    1331             : 
    1332             : static size_t print_time(u64 ts, char *buf)
    1333             : {
    1334           0 :         unsigned long rem_nsec = do_div(ts, 1000000000);
    1335             : 
    1336           0 :         return sprintf(buf, "[%5lu.%06lu]",
    1337             :                        (unsigned long)ts, rem_nsec / 1000);
    1338             : }
    1339             : 
    1340             : #ifdef CONFIG_PRINTK_CALLER
    1341             : static size_t print_caller(u32 id, char *buf)
    1342             : {
    1343             :         char caller[12];
    1344             : 
    1345             :         snprintf(caller, sizeof(caller), "%c%u",
    1346             :                  id & 0x80000000 ? 'C' : 'T', id & ~0x80000000);
    1347             :         return sprintf(buf, "[%6s]", caller);
    1348             : }
    1349             : #else
    1350             : #define print_caller(id, buf) 0
    1351             : #endif
    1352             : 
    1353        1386 : static size_t info_print_prefix(const struct printk_info  *info, bool syslog,
    1354             :                                 bool time, char *buf)
    1355             : {
    1356        1386 :         size_t len = 0;
    1357             : 
    1358        1386 :         if (syslog)
    1359           0 :                 len = print_syslog((info->facility << 3) | info->level, buf);
    1360             : 
    1361        1386 :         if (time)
    1362           0 :                 len += print_time(info->ts_nsec, buf + len);
    1363             : 
    1364        1386 :         len += print_caller(info->caller_id, buf + len);
    1365             : 
    1366        1386 :         if (IS_ENABLED(CONFIG_PRINTK_CALLER) || time) {
    1367           0 :                 buf[len++] = ' ';
    1368           0 :                 buf[len] = '\0';
    1369             :         }
    1370             : 
    1371        1386 :         return len;
    1372             : }
    1373             : 
    1374             : /*
    1375             :  * Prepare the record for printing. The text is shifted within the given
    1376             :  * buffer to avoid a need for another one. The following operations are
    1377             :  * done:
    1378             :  *
    1379             :  *   - Add prefix for each line.
    1380             :  *   - Drop truncated lines that no longer fit into the buffer.
    1381             :  *   - Add the trailing newline that has been removed in vprintk_store().
    1382             :  *   - Add a string terminator.
    1383             :  *
    1384             :  * Since the produced string is always terminated, the maximum possible
    1385             :  * return value is @r->text_buf_size - 1;
    1386             :  *
    1387             :  * Return: The length of the updated/prepared text, including the added
    1388             :  * prefixes and the newline. The terminator is not counted. The dropped
    1389             :  * line(s) are not counted.
    1390             :  */
    1391        1386 : static size_t record_print_text(struct printk_record *r, bool syslog,
    1392             :                                 bool time)
    1393             : {
    1394        1386 :         size_t text_len = r->info->text_len;
    1395        1386 :         size_t buf_size = r->text_buf_size;
    1396        1386 :         char *text = r->text_buf;
    1397             :         char prefix[PRINTK_PREFIX_MAX];
    1398        1386 :         bool truncated = false;
    1399             :         size_t prefix_len;
    1400             :         size_t line_len;
    1401        1386 :         size_t len = 0;
    1402             :         char *next;
    1403             : 
    1404             :         /*
    1405             :          * If the message was truncated because the buffer was not large
    1406             :          * enough, treat the available text as if it were the full text.
    1407             :          */
    1408        1386 :         if (text_len > buf_size)
    1409           0 :                 text_len = buf_size;
    1410             : 
    1411        1386 :         prefix_len = info_print_prefix(r->info, syslog, time, prefix);
    1412             : 
    1413             :         /*
    1414             :          * @text_len: bytes of unprocessed text
    1415             :          * @line_len: bytes of current line _without_ newline
    1416             :          * @text:     pointer to beginning of current line
    1417             :          * @len:      number of bytes prepared in r->text_buf
    1418             :          */
    1419             :         for (;;) {
    1420        1386 :                 next = memchr(text, '\n', text_len);
    1421        1386 :                 if (next) {
    1422           0 :                         line_len = next - text;
    1423             :                 } else {
    1424             :                         /* Drop truncated line(s). */
    1425        1386 :                         if (truncated)
    1426             :                                 break;
    1427             :                         line_len = text_len;
    1428             :                 }
    1429             : 
    1430             :                 /*
    1431             :                  * Truncate the text if there is not enough space to add the
    1432             :                  * prefix and a trailing newline and a terminator.
    1433             :                  */
    1434        1386 :                 if (len + prefix_len + text_len + 1 + 1 > buf_size) {
    1435             :                         /* Drop even the current line if no space. */
    1436           0 :                         if (len + prefix_len + line_len + 1 + 1 > buf_size)
    1437             :                                 break;
    1438             : 
    1439           0 :                         text_len = buf_size - len - prefix_len - 1 - 1;
    1440           0 :                         truncated = true;
    1441             :                 }
    1442             : 
    1443        1386 :                 memmove(text + prefix_len, text, text_len);
    1444        1386 :                 memcpy(text, prefix, prefix_len);
    1445             : 
    1446             :                 /*
    1447             :                  * Increment the prepared length to include the text and
    1448             :                  * prefix that were just moved+copied. Also increment for the
    1449             :                  * newline at the end of this line. If this is the last line,
    1450             :                  * there is no newline, but it will be added immediately below.
    1451             :                  */
    1452        1386 :                 len += prefix_len + line_len + 1;
    1453        1386 :                 if (text_len == line_len) {
    1454             :                         /*
    1455             :                          * This is the last line. Add the trailing newline
    1456             :                          * removed in vprintk_store().
    1457             :                          */
    1458        1386 :                         text[prefix_len + line_len] = '\n';
    1459        1386 :                         break;
    1460             :                 }
    1461             : 
    1462             :                 /*
    1463             :                  * Advance beyond the added prefix and the related line with
    1464             :                  * its newline.
    1465             :                  */
    1466           0 :                 text += prefix_len + line_len + 1;
    1467             : 
    1468             :                 /*
    1469             :                  * The remaining text has only decreased by the line with its
    1470             :                  * newline.
    1471             :                  *
    1472             :                  * Note that @text_len can become zero. It happens when @text
    1473             :                  * ended with a newline (either due to truncation or the
    1474             :                  * original string ending with "\n\n"). The loop is correctly
    1475             :                  * repeated and (if not truncated) an empty line with a prefix
    1476             :                  * will be prepared.
    1477             :                  */
    1478           0 :                 text_len -= line_len + 1;
    1479             :         }
    1480             : 
    1481             :         /*
    1482             :          * If a buffer was provided, it will be terminated. Space for the
    1483             :          * string terminator is guaranteed to be available. The terminator is
    1484             :          * not counted in the return value.
    1485             :          */
    1486        1386 :         if (buf_size > 0)
    1487        1386 :                 r->text_buf[len] = 0;
    1488             : 
    1489        1386 :         return len;
    1490             : }
    1491             : 
    1492             : static size_t get_record_print_text_size(struct printk_info *info,
    1493             :                                          unsigned int line_count,
    1494             :                                          bool syslog, bool time)
    1495             : {
    1496             :         char prefix[PRINTK_PREFIX_MAX];
    1497             :         size_t prefix_len;
    1498             : 
    1499           0 :         prefix_len = info_print_prefix(info, syslog, time, prefix);
    1500             : 
    1501             :         /*
    1502             :          * Each line will be preceded with a prefix. The intermediate
    1503             :          * newlines are already within the text, but a final trailing
    1504             :          * newline will be added.
    1505             :          */
    1506           0 :         return ((prefix_len * line_count) + info->text_len + 1);
    1507             : }
    1508             : 
    1509             : /*
    1510             :  * Beginning with @start_seq, find the first record where it and all following
    1511             :  * records up to (but not including) @max_seq fit into @size.
    1512             :  *
    1513             :  * @max_seq is simply an upper bound and does not need to exist. If the caller
    1514             :  * does not require an upper bound, -1 can be used for @max_seq.
    1515             :  */
    1516           0 : static u64 find_first_fitting_seq(u64 start_seq, u64 max_seq, size_t size,
    1517             :                                   bool syslog, bool time)
    1518             : {
    1519             :         struct printk_info info;
    1520             :         unsigned int line_count;
    1521           0 :         size_t len = 0;
    1522             :         u64 seq;
    1523             : 
    1524             :         /* Determine the size of the records up to @max_seq. */
    1525           0 :         prb_for_each_info(start_seq, prb, seq, &info, &line_count) {
    1526           0 :                 if (info.seq >= max_seq)
    1527             :                         break;
    1528           0 :                 len += get_record_print_text_size(&info, line_count, syslog, time);
    1529             :         }
    1530             : 
    1531             :         /*
    1532             :          * Adjust the upper bound for the next loop to avoid subtracting
    1533             :          * lengths that were never added.
    1534             :          */
    1535           0 :         if (seq < max_seq)
    1536           0 :                 max_seq = seq;
    1537             : 
    1538             :         /*
    1539             :          * Move first record forward until length fits into the buffer. Ignore
    1540             :          * newest messages that were not counted in the above cycle. Messages
    1541             :          * might appear and get lost in the meantime. This is a best effort
    1542             :          * that prevents an infinite loop that could occur with a retry.
    1543             :          */
    1544           0 :         prb_for_each_info(start_seq, prb, seq, &info, &line_count) {
    1545           0 :                 if (len <= size || info.seq >= max_seq)
    1546             :                         break;
    1547           0 :                 len -= get_record_print_text_size(&info, line_count, syslog, time);
    1548             :         }
    1549             : 
    1550           0 :         return seq;
    1551             : }
    1552             : 
    1553             : /* The caller is responsible for making sure @size is greater than 0. */
    1554           0 : static int syslog_print(char __user *buf, int size)
    1555             : {
    1556             :         struct printk_info info;
    1557             :         struct printk_record r;
    1558             :         char *text;
    1559           0 :         int len = 0;
    1560             :         u64 seq;
    1561             : 
    1562           0 :         text = kmalloc(PRINTK_MESSAGE_MAX, GFP_KERNEL);
    1563           0 :         if (!text)
    1564             :                 return -ENOMEM;
    1565             : 
    1566           0 :         prb_rec_init_rd(&r, &info, text, PRINTK_MESSAGE_MAX);
    1567             : 
    1568           0 :         mutex_lock(&syslog_lock);
    1569             : 
    1570             :         /*
    1571             :          * Wait for the @syslog_seq record to be available. @syslog_seq may
    1572             :          * change while waiting.
    1573             :          */
    1574             :         do {
    1575           0 :                 seq = syslog_seq;
    1576             : 
    1577           0 :                 mutex_unlock(&syslog_lock);
    1578             :                 /*
    1579             :                  * Guarantee this task is visible on the waitqueue before
    1580             :                  * checking the wake condition.
    1581             :                  *
    1582             :                  * The full memory barrier within set_current_state() of
    1583             :                  * prepare_to_wait_event() pairs with the full memory barrier
    1584             :                  * within wq_has_sleeper().
    1585             :                  *
    1586             :                  * This pairs with __wake_up_klogd:A.
    1587             :                  */
    1588           0 :                 len = wait_event_interruptible(log_wait,
    1589             :                                 prb_read_valid(prb, seq, NULL)); /* LMM(syslog_print:A) */
    1590           0 :                 mutex_lock(&syslog_lock);
    1591             : 
    1592           0 :                 if (len)
    1593             :                         goto out;
    1594           0 :         } while (syslog_seq != seq);
    1595             : 
    1596             :         /*
    1597             :          * Copy records that fit into the buffer. The above cycle makes sure
    1598             :          * that the first record is always available.
    1599             :          */
    1600             :         do {
    1601             :                 size_t n;
    1602             :                 size_t skip;
    1603             :                 int err;
    1604             : 
    1605           0 :                 if (!prb_read_valid(prb, syslog_seq, &r))
    1606             :                         break;
    1607             : 
    1608           0 :                 if (r.info->seq != syslog_seq) {
    1609             :                         /* message is gone, move to next valid one */
    1610           0 :                         syslog_seq = r.info->seq;
    1611           0 :                         syslog_partial = 0;
    1612             :                 }
    1613             : 
    1614             :                 /*
    1615             :                  * To keep reading/counting partial line consistent,
    1616             :                  * use printk_time value as of the beginning of a line.
    1617             :                  */
    1618           0 :                 if (!syslog_partial)
    1619           0 :                         syslog_time = printk_time;
    1620             : 
    1621           0 :                 skip = syslog_partial;
    1622           0 :                 n = record_print_text(&r, true, syslog_time);
    1623           0 :                 if (n - syslog_partial <= size) {
    1624             :                         /* message fits into buffer, move forward */
    1625           0 :                         syslog_seq = r.info->seq + 1;
    1626           0 :                         n -= syslog_partial;
    1627           0 :                         syslog_partial = 0;
    1628           0 :                 } else if (!len){
    1629             :                         /* partial read(), remember position */
    1630           0 :                         n = size;
    1631           0 :                         syslog_partial += n;
    1632             :                 } else
    1633             :                         n = 0;
    1634             : 
    1635           0 :                 if (!n)
    1636             :                         break;
    1637             : 
    1638           0 :                 mutex_unlock(&syslog_lock);
    1639           0 :                 err = copy_to_user(buf, text + skip, n);
    1640           0 :                 mutex_lock(&syslog_lock);
    1641             : 
    1642           0 :                 if (err) {
    1643           0 :                         if (!len)
    1644           0 :                                 len = -EFAULT;
    1645             :                         break;
    1646             :                 }
    1647             : 
    1648           0 :                 len += n;
    1649           0 :                 size -= n;
    1650           0 :                 buf += n;
    1651           0 :         } while (size);
    1652             : out:
    1653           0 :         mutex_unlock(&syslog_lock);
    1654           0 :         kfree(text);
    1655           0 :         return len;
    1656             : }
    1657             : 
    1658           0 : static int syslog_print_all(char __user *buf, int size, bool clear)
    1659             : {
    1660             :         struct printk_info info;
    1661             :         struct printk_record r;
    1662             :         char *text;
    1663           0 :         int len = 0;
    1664             :         u64 seq;
    1665             :         bool time;
    1666             : 
    1667           0 :         text = kmalloc(PRINTK_MESSAGE_MAX, GFP_KERNEL);
    1668           0 :         if (!text)
    1669             :                 return -ENOMEM;
    1670             : 
    1671           0 :         time = printk_time;
    1672             :         /*
    1673             :          * Find first record that fits, including all following records,
    1674             :          * into the user-provided buffer for this dump.
    1675             :          */
    1676           0 :         seq = find_first_fitting_seq(latched_seq_read_nolock(&clear_seq), -1,
    1677             :                                      size, true, time);
    1678             : 
    1679           0 :         prb_rec_init_rd(&r, &info, text, PRINTK_MESSAGE_MAX);
    1680             : 
    1681           0 :         len = 0;
    1682           0 :         prb_for_each_record(seq, prb, seq, &r) {
    1683             :                 int textlen;
    1684             : 
    1685           0 :                 textlen = record_print_text(&r, true, time);
    1686             : 
    1687           0 :                 if (len + textlen > size) {
    1688           0 :                         seq--;
    1689           0 :                         break;
    1690             :                 }
    1691             : 
    1692           0 :                 if (copy_to_user(buf + len, text, textlen))
    1693             :                         len = -EFAULT;
    1694             :                 else
    1695           0 :                         len += textlen;
    1696             : 
    1697           0 :                 if (len < 0)
    1698             :                         break;
    1699             :         }
    1700             : 
    1701           0 :         if (clear) {
    1702           0 :                 mutex_lock(&syslog_lock);
    1703           0 :                 latched_seq_write(&clear_seq, seq);
    1704           0 :                 mutex_unlock(&syslog_lock);
    1705             :         }
    1706             : 
    1707           0 :         kfree(text);
    1708           0 :         return len;
    1709             : }
    1710             : 
    1711           0 : static void syslog_clear(void)
    1712             : {
    1713           0 :         mutex_lock(&syslog_lock);
    1714           0 :         latched_seq_write(&clear_seq, prb_next_seq(prb));
    1715           0 :         mutex_unlock(&syslog_lock);
    1716           0 : }
    1717             : 
    1718           0 : int do_syslog(int type, char __user *buf, int len, int source)
    1719             : {
    1720             :         struct printk_info info;
    1721           0 :         bool clear = false;
    1722             :         static int saved_console_loglevel = LOGLEVEL_DEFAULT;
    1723             :         int error;
    1724             : 
    1725           0 :         error = check_syslog_permissions(type, source);
    1726           0 :         if (error)
    1727             :                 return error;
    1728             : 
    1729           0 :         switch (type) {
    1730             :         case SYSLOG_ACTION_CLOSE:       /* Close log */
    1731             :                 break;
    1732             :         case SYSLOG_ACTION_OPEN:        /* Open log */
    1733             :                 break;
    1734             :         case SYSLOG_ACTION_READ:        /* Read from log */
    1735           0 :                 if (!buf || len < 0)
    1736             :                         return -EINVAL;
    1737           0 :                 if (!len)
    1738             :                         return 0;
    1739           0 :                 if (!access_ok(buf, len))
    1740             :                         return -EFAULT;
    1741           0 :                 error = syslog_print(buf, len);
    1742           0 :                 break;
    1743             :         /* Read/clear last kernel messages */
    1744             :         case SYSLOG_ACTION_READ_CLEAR:
    1745           0 :                 clear = true;
    1746             :                 fallthrough;
    1747             :         /* Read last kernel messages */
    1748             :         case SYSLOG_ACTION_READ_ALL:
    1749           0 :                 if (!buf || len < 0)
    1750             :                         return -EINVAL;
    1751           0 :                 if (!len)
    1752             :                         return 0;
    1753           0 :                 if (!access_ok(buf, len))
    1754             :                         return -EFAULT;
    1755           0 :                 error = syslog_print_all(buf, len, clear);
    1756           0 :                 break;
    1757             :         /* Clear ring buffer */
    1758             :         case SYSLOG_ACTION_CLEAR:
    1759           0 :                 syslog_clear();
    1760           0 :                 break;
    1761             :         /* Disable logging to console */
    1762             :         case SYSLOG_ACTION_CONSOLE_OFF:
    1763           0 :                 if (saved_console_loglevel == LOGLEVEL_DEFAULT)
    1764           0 :                         saved_console_loglevel = console_loglevel;
    1765           0 :                 console_loglevel = minimum_console_loglevel;
    1766           0 :                 break;
    1767             :         /* Enable logging to console */
    1768             :         case SYSLOG_ACTION_CONSOLE_ON:
    1769           0 :                 if (saved_console_loglevel != LOGLEVEL_DEFAULT) {
    1770           0 :                         console_loglevel = saved_console_loglevel;
    1771           0 :                         saved_console_loglevel = LOGLEVEL_DEFAULT;
    1772             :                 }
    1773             :                 break;
    1774             :         /* Set level of messages printed to console */
    1775             :         case SYSLOG_ACTION_CONSOLE_LEVEL:
    1776           0 :                 if (len < 1 || len > 8)
    1777             :                         return -EINVAL;
    1778           0 :                 if (len < minimum_console_loglevel)
    1779           0 :                         len = minimum_console_loglevel;
    1780           0 :                 console_loglevel = len;
    1781             :                 /* Implicitly re-enable logging to console */
    1782           0 :                 saved_console_loglevel = LOGLEVEL_DEFAULT;
    1783           0 :                 break;
    1784             :         /* Number of chars in the log buffer */
    1785             :         case SYSLOG_ACTION_SIZE_UNREAD:
    1786           0 :                 mutex_lock(&syslog_lock);
    1787           0 :                 if (!prb_read_valid_info(prb, syslog_seq, &info, NULL)) {
    1788             :                         /* No unread messages. */
    1789           0 :                         mutex_unlock(&syslog_lock);
    1790           0 :                         return 0;
    1791             :                 }
    1792           0 :                 if (info.seq != syslog_seq) {
    1793             :                         /* messages are gone, move to first one */
    1794           0 :                         syslog_seq = info.seq;
    1795           0 :                         syslog_partial = 0;
    1796             :                 }
    1797           0 :                 if (source == SYSLOG_FROM_PROC) {
    1798             :                         /*
    1799             :                          * Short-cut for poll(/"proc/kmsg") which simply checks
    1800             :                          * for pending data, not the size; return the count of
    1801             :                          * records, not the length.
    1802             :                          */
    1803           0 :                         error = prb_next_seq(prb) - syslog_seq;
    1804             :                 } else {
    1805           0 :                         bool time = syslog_partial ? syslog_time : printk_time;
    1806             :                         unsigned int line_count;
    1807             :                         u64 seq;
    1808             : 
    1809           0 :                         prb_for_each_info(syslog_seq, prb, seq, &info,
    1810             :                                           &line_count) {
    1811           0 :                                 error += get_record_print_text_size(&info, line_count,
    1812             :                                                                     true, time);
    1813           0 :                                 time = printk_time;
    1814             :                         }
    1815           0 :                         error -= syslog_partial;
    1816             :                 }
    1817           0 :                 mutex_unlock(&syslog_lock);
    1818           0 :                 break;
    1819             :         /* Size of the log buffer */
    1820             :         case SYSLOG_ACTION_SIZE_BUFFER:
    1821           0 :                 error = log_buf_len;
    1822           0 :                 break;
    1823             :         default:
    1824           0 :                 error = -EINVAL;
    1825           0 :                 break;
    1826             :         }
    1827             : 
    1828             :         return error;
    1829             : }
    1830             : 
    1831           0 : SYSCALL_DEFINE3(syslog, int, type, char __user *, buf, int, len)
    1832             : {
    1833           0 :         return do_syslog(type, buf, len, SYSLOG_FROM_READER);
    1834             : }
    1835             : 
    1836             : /*
    1837             :  * Special console_lock variants that help to reduce the risk of soft-lockups.
    1838             :  * They allow to pass console_lock to another printk() call using a busy wait.
    1839             :  */
    1840             : 
    1841             : #ifdef CONFIG_LOCKDEP
    1842             : static struct lockdep_map console_owner_dep_map = {
    1843             :         .name = "console_owner"
    1844             : };
    1845             : #endif
    1846             : 
    1847             : static DEFINE_RAW_SPINLOCK(console_owner_lock);
    1848             : static struct task_struct *console_owner;
    1849             : static bool console_waiter;
    1850             : 
    1851             : /**
    1852             :  * console_lock_spinning_enable - mark beginning of code where another
    1853             :  *      thread might safely busy wait
    1854             :  *
    1855             :  * This basically converts console_lock into a spinlock. This marks
    1856             :  * the section where the console_lock owner can not sleep, because
    1857             :  * there may be a waiter spinning (like a spinlock). Also it must be
    1858             :  * ready to hand over the lock at the end of the section.
    1859             :  */
    1860             : static void console_lock_spinning_enable(void)
    1861             : {
    1862        1386 :         raw_spin_lock(&console_owner_lock);
    1863        1386 :         console_owner = current;
    1864        1386 :         raw_spin_unlock(&console_owner_lock);
    1865             : 
    1866             :         /* The waiter may spin on us after setting console_owner */
    1867             :         spin_acquire(&console_owner_dep_map, 0, 0, _THIS_IP_);
    1868             : }
    1869             : 
    1870             : /**
    1871             :  * console_lock_spinning_disable_and_check - mark end of code where another
    1872             :  *      thread was able to busy wait and check if there is a waiter
    1873             :  * @cookie: cookie returned from console_srcu_read_lock()
    1874             :  *
    1875             :  * This is called at the end of the section where spinning is allowed.
    1876             :  * It has two functions. First, it is a signal that it is no longer
    1877             :  * safe to start busy waiting for the lock. Second, it checks if
    1878             :  * there is a busy waiter and passes the lock rights to her.
    1879             :  *
    1880             :  * Important: Callers lose both the console_lock and the SRCU read lock if
    1881             :  *      there was a busy waiter. They must not touch items synchronized by
    1882             :  *      console_lock or SRCU read lock in this case.
    1883             :  *
    1884             :  * Return: 1 if the lock rights were passed, 0 otherwise.
    1885             :  */
    1886             : static int console_lock_spinning_disable_and_check(int cookie)
    1887             : {
    1888             :         int waiter;
    1889             : 
    1890        1386 :         raw_spin_lock(&console_owner_lock);
    1891        1386 :         waiter = READ_ONCE(console_waiter);
    1892        1386 :         console_owner = NULL;
    1893        1386 :         raw_spin_unlock(&console_owner_lock);
    1894             : 
    1895        1386 :         if (!waiter) {
    1896             :                 spin_release(&console_owner_dep_map, _THIS_IP_);
    1897             :                 return 0;
    1898             :         }
    1899             : 
    1900             :         /* The waiter is now free to continue */
    1901           0 :         WRITE_ONCE(console_waiter, false);
    1902             : 
    1903             :         spin_release(&console_owner_dep_map, _THIS_IP_);
    1904             : 
    1905             :         /*
    1906             :          * Preserve lockdep lock ordering. Release the SRCU read lock before
    1907             :          * releasing the console_lock.
    1908             :          */
    1909           0 :         console_srcu_read_unlock(cookie);
    1910             : 
    1911             :         /*
    1912             :          * Hand off console_lock to waiter. The waiter will perform
    1913             :          * the up(). After this, the waiter is the console_lock owner.
    1914             :          */
    1915             :         mutex_release(&console_lock_dep_map, _THIS_IP_);
    1916             :         return 1;
    1917             : }
    1918             : 
    1919             : /**
    1920             :  * console_trylock_spinning - try to get console_lock by busy waiting
    1921             :  *
    1922             :  * This allows to busy wait for the console_lock when the current
    1923             :  * owner is running in specially marked sections. It means that
    1924             :  * the current owner is running and cannot reschedule until it
    1925             :  * is ready to lose the lock.
    1926             :  *
    1927             :  * Return: 1 if we got the lock, 0 othrewise
    1928             :  */
    1929         811 : static int console_trylock_spinning(void)
    1930             : {
    1931         811 :         struct task_struct *owner = NULL;
    1932             :         bool waiter;
    1933         811 :         bool spin = false;
    1934             :         unsigned long flags;
    1935             : 
    1936         811 :         if (console_trylock())
    1937             :                 return 1;
    1938             : 
    1939             :         /*
    1940             :          * It's unsafe to spin once a panic has begun. If we are the
    1941             :          * panic CPU, we may have already halted the owner of the
    1942             :          * console_sem. If we are not the panic CPU, then we should
    1943             :          * avoid taking console_sem, so the panic CPU has a better
    1944             :          * chance of cleanly acquiring it later.
    1945             :          */
    1946           0 :         if (panic_in_progress())
    1947             :                 return 0;
    1948             : 
    1949           0 :         printk_safe_enter_irqsave(flags);
    1950             : 
    1951           0 :         raw_spin_lock(&console_owner_lock);
    1952           0 :         owner = READ_ONCE(console_owner);
    1953           0 :         waiter = READ_ONCE(console_waiter);
    1954           0 :         if (!waiter && owner && owner != current) {
    1955           0 :                 WRITE_ONCE(console_waiter, true);
    1956           0 :                 spin = true;
    1957             :         }
    1958           0 :         raw_spin_unlock(&console_owner_lock);
    1959             : 
    1960             :         /*
    1961             :          * If there is an active printk() writing to the
    1962             :          * consoles, instead of having it write our data too,
    1963             :          * see if we can offload that load from the active
    1964             :          * printer, and do some printing ourselves.
    1965             :          * Go into a spin only if there isn't already a waiter
    1966             :          * spinning, and there is an active printer, and
    1967             :          * that active printer isn't us (recursive printk?).
    1968             :          */
    1969           0 :         if (!spin) {
    1970           0 :                 printk_safe_exit_irqrestore(flags);
    1971           0 :                 return 0;
    1972             :         }
    1973             : 
    1974             :         /* We spin waiting for the owner to release us */
    1975             :         spin_acquire(&console_owner_dep_map, 0, 0, _THIS_IP_);
    1976             :         /* Owner will clear console_waiter on hand off */
    1977           0 :         while (READ_ONCE(console_waiter))
    1978             :                 cpu_relax();
    1979             :         spin_release(&console_owner_dep_map, _THIS_IP_);
    1980             : 
    1981           0 :         printk_safe_exit_irqrestore(flags);
    1982             :         /*
    1983             :          * The owner passed the console lock to us.
    1984             :          * Since we did not spin on console lock, annotate
    1985             :          * this as a trylock. Otherwise lockdep will
    1986             :          * complain.
    1987             :          */
    1988             :         mutex_acquire(&console_lock_dep_map, 0, 1, _THIS_IP_);
    1989             : 
    1990           0 :         return 1;
    1991             : }
    1992             : 
    1993             : /*
    1994             :  * Recursion is tracked separately on each CPU. If NMIs are supported, an
    1995             :  * additional NMI context per CPU is also separately tracked. Until per-CPU
    1996             :  * is available, a separate "early tracking" is performed.
    1997             :  */
    1998             : static DEFINE_PER_CPU(u8, printk_count);
    1999             : static u8 printk_count_early;
    2000             : #ifdef CONFIG_HAVE_NMI
    2001             : static DEFINE_PER_CPU(u8, printk_count_nmi);
    2002             : static u8 printk_count_nmi_early;
    2003             : #endif
    2004             : 
    2005             : /*
    2006             :  * Recursion is limited to keep the output sane. printk() should not require
    2007             :  * more than 1 level of recursion (allowing, for example, printk() to trigger
    2008             :  * a WARN), but a higher value is used in case some printk-internal errors
    2009             :  * exist, such as the ringbuffer validation checks failing.
    2010             :  */
    2011             : #define PRINTK_MAX_RECURSION 3
    2012             : 
    2013             : /*
    2014             :  * Return a pointer to the dedicated counter for the CPU+context of the
    2015             :  * caller.
    2016             :  */
    2017             : static u8 *__printk_recursion_counter(void)
    2018             : {
    2019             : #ifdef CONFIG_HAVE_NMI
    2020             :         if (in_nmi()) {
    2021             :                 if (printk_percpu_data_ready())
    2022             :                         return this_cpu_ptr(&printk_count_nmi);
    2023             :                 return &printk_count_nmi_early;
    2024             :         }
    2025             : #endif
    2026         811 :         if (printk_percpu_data_ready())
    2027             :                 return this_cpu_ptr(&printk_count);
    2028             :         return &printk_count_early;
    2029             : }
    2030             : 
    2031             : /*
    2032             :  * Enter recursion tracking. Interrupts are disabled to simplify tracking.
    2033             :  * The caller must check the boolean return value to see if the recursion is
    2034             :  * allowed. On failure, interrupts are not disabled.
    2035             :  *
    2036             :  * @recursion_ptr must be a variable of type (u8 *) and is the same variable
    2037             :  * that is passed to printk_exit_irqrestore().
    2038             :  */
    2039             : #define printk_enter_irqsave(recursion_ptr, flags)      \
    2040             : ({                                                      \
    2041             :         bool success = true;                            \
    2042             :                                                         \
    2043             :         typecheck(u8 *, recursion_ptr);                 \
    2044             :         local_irq_save(flags);                          \
    2045             :         (recursion_ptr) = __printk_recursion_counter(); \
    2046             :         if (*(recursion_ptr) > PRINTK_MAX_RECURSION) {       \
    2047             :                 local_irq_restore(flags);               \
    2048             :                 success = false;                        \
    2049             :         } else {                                        \
    2050             :                 (*(recursion_ptr))++;                   \
    2051             :         }                                               \
    2052             :         success;                                        \
    2053             : })
    2054             : 
    2055             : /* Exit recursion tracking, restoring interrupts. */
    2056             : #define printk_exit_irqrestore(recursion_ptr, flags)    \
    2057             :         do {                                            \
    2058             :                 typecheck(u8 *, recursion_ptr);         \
    2059             :                 (*(recursion_ptr))--;                   \
    2060             :                 local_irq_restore(flags);               \
    2061             :         } while (0)
    2062             : 
    2063             : int printk_delay_msec __read_mostly;
    2064             : 
    2065             : static inline void printk_delay(int level)
    2066             : {
    2067         811 :         boot_delay_msec(level);
    2068             : 
    2069         811 :         if (unlikely(printk_delay_msec)) {
    2070             :                 int m = printk_delay_msec;
    2071             : 
    2072           0 :                 while (m--) {
    2073             :                         mdelay(1);
    2074             :                         touch_nmi_watchdog();
    2075             :                 }
    2076             :         }
    2077             : }
    2078             : 
    2079             : static inline u32 printk_caller_id(void)
    2080             : {
    2081        1622 :         return in_task() ? task_pid_nr(current) :
    2082             :                 0x80000000 + smp_processor_id();
    2083             : }
    2084             : 
    2085             : /**
    2086             :  * printk_parse_prefix - Parse level and control flags.
    2087             :  *
    2088             :  * @text:     The terminated text message.
    2089             :  * @level:    A pointer to the current level value, will be updated.
    2090             :  * @flags:    A pointer to the current printk_info flags, will be updated.
    2091             :  *
    2092             :  * @level may be NULL if the caller is not interested in the parsed value.
    2093             :  * Otherwise the variable pointed to by @level must be set to
    2094             :  * LOGLEVEL_DEFAULT in order to be updated with the parsed value.
    2095             :  *
    2096             :  * @flags may be NULL if the caller is not interested in the parsed value.
    2097             :  * Otherwise the variable pointed to by @flags will be OR'd with the parsed
    2098             :  * value.
    2099             :  *
    2100             :  * Return: The length of the parsed level and control flags.
    2101             :  */
    2102        1622 : u16 printk_parse_prefix(const char *text, int *level,
    2103             :                         enum printk_info_flags *flags)
    2104             : {
    2105        1622 :         u16 prefix_len = 0;
    2106             :         int kern_level;
    2107             : 
    2108        4602 :         while (*text) {
    2109        2980 :                 kern_level = printk_get_level(text);
    2110        2980 :                 if (!kern_level)
    2111             :                         break;
    2112             : 
    2113        1358 :                 switch (kern_level) {
    2114             :                 case '0' ... '7':
    2115        1202 :                         if (level && *level == LOGLEVEL_DEFAULT)
    2116         601 :                                 *level = kern_level - '0';
    2117             :                         break;
    2118             :                 case 'c':       /* KERN_CONT */
    2119         156 :                         if (flags)
    2120          78 :                                 *flags |= LOG_CONT;
    2121             :                 }
    2122             : 
    2123        1358 :                 prefix_len += 2;
    2124        1358 :                 text += 2;
    2125             :         }
    2126             : 
    2127        1622 :         return prefix_len;
    2128             : }
    2129             : 
    2130             : __printf(5, 0)
    2131         811 : static u16 printk_sprint(char *text, u16 size, int facility,
    2132             :                          enum printk_info_flags *flags, const char *fmt,
    2133             :                          va_list args)
    2134             : {
    2135             :         u16 text_len;
    2136             : 
    2137         811 :         text_len = vscnprintf(text, size, fmt, args);
    2138             : 
    2139             :         /* Mark and strip a trailing newline. */
    2140         811 :         if (text_len && text[text_len - 1] == '\n') {
    2141         290 :                 text_len--;
    2142         290 :                 *flags |= LOG_NEWLINE;
    2143             :         }
    2144             : 
    2145             :         /* Strip log level and control flags. */
    2146         811 :         if (facility == 0) {
    2147             :                 u16 prefix_len;
    2148             : 
    2149         811 :                 prefix_len = printk_parse_prefix(text, NULL, NULL);
    2150         811 :                 if (prefix_len) {
    2151         679 :                         text_len -= prefix_len;
    2152         679 :                         memmove(text, text + prefix_len, text_len);
    2153             :                 }
    2154             :         }
    2155             : 
    2156         811 :         trace_console(text, text_len);
    2157             : 
    2158         811 :         return text_len;
    2159             : }
    2160             : 
    2161             : __printf(4, 0)
    2162         811 : int vprintk_store(int facility, int level,
    2163             :                   const struct dev_printk_info *dev_info,
    2164             :                   const char *fmt, va_list args)
    2165             : {
    2166             :         struct prb_reserved_entry e;
    2167         811 :         enum printk_info_flags flags = 0;
    2168             :         struct printk_record r;
    2169             :         unsigned long irqflags;
    2170         811 :         u16 trunc_msg_len = 0;
    2171             :         char prefix_buf[8];
    2172             :         u8 *recursion_ptr;
    2173             :         u16 reserve_size;
    2174             :         va_list args2;
    2175             :         u32 caller_id;
    2176             :         u16 text_len;
    2177         811 :         int ret = 0;
    2178             :         u64 ts_nsec;
    2179             : 
    2180        2433 :         if (!printk_enter_irqsave(recursion_ptr, irqflags))
    2181             :                 return 0;
    2182             : 
    2183             :         /*
    2184             :          * Since the duration of printk() can vary depending on the message
    2185             :          * and state of the ringbuffer, grab the timestamp now so that it is
    2186             :          * close to the call of printk(). This provides a more deterministic
    2187             :          * timestamp with respect to the caller.
    2188             :          */
    2189         811 :         ts_nsec = local_clock();
    2190             : 
    2191         811 :         caller_id = printk_caller_id();
    2192             : 
    2193             :         /*
    2194             :          * The sprintf needs to come first since the syslog prefix might be
    2195             :          * passed in as a parameter. An extra byte must be reserved so that
    2196             :          * later the vscnprintf() into the reserved buffer has room for the
    2197             :          * terminating '\0', which is not counted by vsnprintf().
    2198             :          */
    2199         811 :         va_copy(args2, args);
    2200         811 :         reserve_size = vsnprintf(&prefix_buf[0], sizeof(prefix_buf), fmt, args2) + 1;
    2201         811 :         va_end(args2);
    2202             : 
    2203         811 :         if (reserve_size > PRINTKRB_RECORD_MAX)
    2204           0 :                 reserve_size = PRINTKRB_RECORD_MAX;
    2205             : 
    2206             :         /* Extract log level or control flags. */
    2207         811 :         if (facility == 0)
    2208         811 :                 printk_parse_prefix(&prefix_buf[0], &level, &flags);
    2209             : 
    2210         811 :         if (level == LOGLEVEL_DEFAULT)
    2211         210 :                 level = default_message_loglevel;
    2212             : 
    2213         811 :         if (dev_info)
    2214           0 :                 flags |= LOG_NEWLINE;
    2215             : 
    2216         811 :         if (flags & LOG_CONT) {
    2217         156 :                 prb_rec_init_wr(&r, reserve_size);
    2218          78 :                 if (prb_reserve_in_last(&e, prb, &r, caller_id, PRINTKRB_RECORD_MAX)) {
    2219          63 :                         text_len = printk_sprint(&r.text_buf[r.info->text_len], reserve_size,
    2220             :                                                  facility, &flags, fmt, args);
    2221          63 :                         r.info->text_len += text_len;
    2222             : 
    2223          63 :                         if (flags & LOG_NEWLINE) {
    2224          16 :                                 r.info->flags |= LOG_NEWLINE;
    2225          16 :                                 prb_final_commit(&e);
    2226             :                         } else {
    2227          47 :                                 prb_commit(&e);
    2228             :                         }
    2229             : 
    2230          63 :                         ret = text_len;
    2231          63 :                         goto out;
    2232             :                 }
    2233             :         }
    2234             : 
    2235             :         /*
    2236             :          * Explicitly initialize the record before every prb_reserve() call.
    2237             :          * prb_reserve_in_last() and prb_reserve() purposely invalidate the
    2238             :          * structure when they fail.
    2239             :          */
    2240        1496 :         prb_rec_init_wr(&r, reserve_size);
    2241         748 :         if (!prb_reserve(&e, prb, &r)) {
    2242             :                 /* truncate the message if it is too long for empty buffer */
    2243           0 :                 truncate_msg(&reserve_size, &trunc_msg_len);
    2244             : 
    2245           0 :                 prb_rec_init_wr(&r, reserve_size + trunc_msg_len);
    2246           0 :                 if (!prb_reserve(&e, prb, &r))
    2247             :                         goto out;
    2248             :         }
    2249             : 
    2250             :         /* fill message */
    2251         748 :         text_len = printk_sprint(&r.text_buf[0], reserve_size, facility, &flags, fmt, args);
    2252         748 :         if (trunc_msg_len)
    2253           0 :                 memcpy(&r.text_buf[text_len], trunc_msg, trunc_msg_len);
    2254         748 :         r.info->text_len = text_len + trunc_msg_len;
    2255         748 :         r.info->facility = facility;
    2256         748 :         r.info->level = level & 7;
    2257         748 :         r.info->flags = flags & 0x1f;
    2258         748 :         r.info->ts_nsec = ts_nsec;
    2259         748 :         r.info->caller_id = caller_id;
    2260         748 :         if (dev_info)
    2261           0 :                 memcpy(&r.info->dev_info, dev_info, sizeof(r.info->dev_info));
    2262             : 
    2263             :         /* A message without a trailing newline can be continued. */
    2264         748 :         if (!(flags & LOG_NEWLINE))
    2265         474 :                 prb_commit(&e);
    2266             :         else
    2267         274 :                 prb_final_commit(&e);
    2268             : 
    2269         748 :         ret = text_len + trunc_msg_len;
    2270             : out:
    2271        1622 :         printk_exit_irqrestore(recursion_ptr, irqflags);
    2272         811 :         return ret;
    2273             : }
    2274             : 
    2275         811 : asmlinkage int vprintk_emit(int facility, int level,
    2276             :                             const struct dev_printk_info *dev_info,
    2277             :                             const char *fmt, va_list args)
    2278             : {
    2279             :         int printed_len;
    2280         811 :         bool in_sched = false;
    2281             : 
    2282             :         /* Suppress unimportant messages after panic happens */
    2283         811 :         if (unlikely(suppress_printk))
    2284             :                 return 0;
    2285             : 
    2286         811 :         if (unlikely(suppress_panic_printk) &&
    2287           0 :             atomic_read(&panic_cpu) != raw_smp_processor_id())
    2288             :                 return 0;
    2289             : 
    2290         811 :         if (level == LOGLEVEL_SCHED) {
    2291           0 :                 level = LOGLEVEL_DEFAULT;
    2292           0 :                 in_sched = true;
    2293             :         }
    2294             : 
    2295        1622 :         printk_delay(level);
    2296             : 
    2297         811 :         printed_len = vprintk_store(facility, level, dev_info, fmt, args);
    2298             : 
    2299             :         /* If called from the scheduler, we can not call up(). */
    2300         811 :         if (!in_sched) {
    2301             :                 /*
    2302             :                  * The caller may be holding system-critical or
    2303             :                  * timing-sensitive locks. Disable preemption during
    2304             :                  * printing of all remaining records to all consoles so that
    2305             :                  * this context can return as soon as possible. Hopefully
    2306             :                  * another printk() caller will take over the printing.
    2307             :                  */
    2308         811 :                 preempt_disable();
    2309             :                 /*
    2310             :                  * Try to acquire and then immediately release the console
    2311             :                  * semaphore. The release will print out buffers. With the
    2312             :                  * spinning variant, this context tries to take over the
    2313             :                  * printing from another printing context.
    2314             :                  */
    2315         811 :                 if (console_trylock_spinning())
    2316         811 :                         console_unlock();
    2317         811 :                 preempt_enable();
    2318             :         }
    2319             : 
    2320             :         wake_up_klogd();
    2321         811 :         return printed_len;
    2322             : }
    2323             : EXPORT_SYMBOL(vprintk_emit);
    2324             : 
    2325         811 : int vprintk_default(const char *fmt, va_list args)
    2326             : {
    2327         811 :         return vprintk_emit(0, LOGLEVEL_DEFAULT, NULL, fmt, args);
    2328             : }
    2329             : EXPORT_SYMBOL_GPL(vprintk_default);
    2330             : 
    2331         810 : asmlinkage __visible int _printk(const char *fmt, ...)
    2332             : {
    2333             :         va_list args;
    2334             :         int r;
    2335             : 
    2336         810 :         va_start(args, fmt);
    2337         810 :         r = vprintk(fmt, args);
    2338         810 :         va_end(args);
    2339             : 
    2340         810 :         return r;
    2341             : }
    2342             : EXPORT_SYMBOL(_printk);
    2343             : 
    2344             : static bool pr_flush(int timeout_ms, bool reset_on_progress);
    2345             : static bool __pr_flush(struct console *con, int timeout_ms, bool reset_on_progress);
    2346             : 
    2347             : #else /* CONFIG_PRINTK */
    2348             : 
    2349             : #define printk_time             false
    2350             : 
    2351             : #define prb_read_valid(rb, seq, r)      false
    2352             : #define prb_first_valid_seq(rb)         0
    2353             : #define prb_next_seq(rb)                0
    2354             : 
    2355             : static u64 syslog_seq;
    2356             : 
    2357             : static size_t record_print_text(const struct printk_record *r,
    2358             :                                 bool syslog, bool time)
    2359             : {
    2360             :         return 0;
    2361             : }
    2362             : static ssize_t info_print_ext_header(char *buf, size_t size,
    2363             :                                      struct printk_info *info)
    2364             : {
    2365             :         return 0;
    2366             : }
    2367             : static ssize_t msg_print_ext_body(char *buf, size_t size,
    2368             :                                   char *text, size_t text_len,
    2369             :                                   struct dev_printk_info *dev_info) { return 0; }
    2370             : static void console_lock_spinning_enable(void) { }
    2371             : static int console_lock_spinning_disable_and_check(int cookie) { return 0; }
    2372             : static bool suppress_message_printing(int level) { return false; }
    2373             : static bool pr_flush(int timeout_ms, bool reset_on_progress) { return true; }
    2374             : static bool __pr_flush(struct console *con, int timeout_ms, bool reset_on_progress) { return true; }
    2375             : 
    2376             : #endif /* CONFIG_PRINTK */
    2377             : 
    2378             : #ifdef CONFIG_EARLY_PRINTK
    2379             : struct console *early_console;
    2380             : 
    2381           0 : asmlinkage __visible void early_printk(const char *fmt, ...)
    2382             : {
    2383             :         va_list ap;
    2384             :         char buf[512];
    2385             :         int n;
    2386             : 
    2387           0 :         if (!early_console)
    2388           0 :                 return;
    2389             : 
    2390           0 :         va_start(ap, fmt);
    2391           0 :         n = vscnprintf(buf, sizeof(buf), fmt, ap);
    2392           0 :         va_end(ap);
    2393             : 
    2394           0 :         early_console->write(early_console, buf, n);
    2395             : }
    2396             : #endif
    2397             : 
    2398             : static void set_user_specified(struct console_cmdline *c, bool user_specified)
    2399             : {
    2400           1 :         if (!user_specified)
    2401             :                 return;
    2402             : 
    2403             :         /*
    2404             :          * @c console was defined by the user on the command line.
    2405             :          * Do not clear when added twice also by SPCR or the device tree.
    2406             :          */
    2407           1 :         c->user_specified = true;
    2408             :         /* At least one console defined by the user on the command line. */
    2409           1 :         console_set_on_cmdline = 1;
    2410             : }
    2411             : 
    2412           1 : static int __add_preferred_console(char *name, int idx, char *options,
    2413             :                                    char *brl_options, bool user_specified)
    2414             : {
    2415             :         struct console_cmdline *c;
    2416             :         int i;
    2417             : 
    2418             :         /*
    2419             :          *      See if this tty is not yet registered, and
    2420             :          *      if we have a slot free.
    2421             :          */
    2422           2 :         for (i = 0, c = console_cmdline;
    2423           1 :              i < MAX_CMDLINECONSOLES && c->name[0];
    2424           0 :              i++, c++) {
    2425           0 :                 if (strcmp(c->name, name) == 0 && c->index == idx) {
    2426           0 :                         if (!brl_options)
    2427           0 :                                 preferred_console = i;
    2428           0 :                         set_user_specified(c, user_specified);
    2429             :                         return 0;
    2430             :                 }
    2431             :         }
    2432           1 :         if (i == MAX_CMDLINECONSOLES)
    2433             :                 return -E2BIG;
    2434           1 :         if (!brl_options)
    2435           1 :                 preferred_console = i;
    2436           1 :         strscpy(c->name, name, sizeof(c->name));
    2437           1 :         c->options = options;
    2438           2 :         set_user_specified(c, user_specified);
    2439           1 :         braille_set_options(c, brl_options);
    2440             : 
    2441           1 :         c->index = idx;
    2442           1 :         return 0;
    2443             : }
    2444             : 
    2445           0 : static int __init console_msg_format_setup(char *str)
    2446             : {
    2447           0 :         if (!strcmp(str, "syslog"))
    2448           0 :                 console_msg_format = MSG_FORMAT_SYSLOG;
    2449           0 :         if (!strcmp(str, "default"))
    2450           0 :                 console_msg_format = MSG_FORMAT_DEFAULT;
    2451           0 :         return 1;
    2452             : }
    2453             : __setup("console_msg_format=", console_msg_format_setup);
    2454             : 
    2455             : /*
    2456             :  * Set up a console.  Called via do_early_param() in init/main.c
    2457             :  * for each "console=" parameter in the boot command line.
    2458             :  */
    2459           1 : static int __init console_setup(char *str)
    2460             : {
    2461             :         char buf[sizeof(console_cmdline[0].name) + 4]; /* 4 for "ttyS" */
    2462           1 :         char *s, *options, *brl_options = NULL;
    2463             :         int idx;
    2464             : 
    2465             :         /*
    2466             :          * console="" or console=null have been suggested as a way to
    2467             :          * disable console output. Use ttynull that has been created
    2468             :          * for exactly this purpose.
    2469             :          */
    2470           1 :         if (str[0] == 0 || strcmp(str, "null") == 0) {
    2471           0 :                 __add_preferred_console("ttynull", 0, NULL, NULL, true);
    2472           0 :                 return 1;
    2473             :         }
    2474             : 
    2475           1 :         if (_braille_console_setup(&str, &brl_options))
    2476             :                 return 1;
    2477             : 
    2478             :         /*
    2479             :          * Decode str into name, index, options.
    2480             :          */
    2481           1 :         if (str[0] >= '0' && str[0] <= '9') {
    2482           0 :                 strcpy(buf, "ttyS");
    2483           0 :                 strncpy(buf + 4, str, sizeof(buf) - 5);
    2484             :         } else {
    2485           1 :                 strncpy(buf, str, sizeof(buf) - 1);
    2486             :         }
    2487           1 :         buf[sizeof(buf) - 1] = 0;
    2488           1 :         options = strchr(str, ',');
    2489           1 :         if (options)
    2490           0 :                 *(options++) = 0;
    2491             : #ifdef __sparc__
    2492             :         if (!strcmp(str, "ttya"))
    2493             :                 strcpy(buf, "ttyS0");
    2494             :         if (!strcmp(str, "ttyb"))
    2495             :                 strcpy(buf, "ttyS1");
    2496             : #endif
    2497           4 :         for (s = buf; *s; s++)
    2498           6 :                 if (isdigit(*s) || *s == ',')
    2499             :                         break;
    2500           1 :         idx = simple_strtoul(s, NULL, 10);
    2501           1 :         *s = 0;
    2502             : 
    2503           1 :         __add_preferred_console(buf, idx, options, brl_options, true);
    2504           1 :         return 1;
    2505             : }
    2506             : __setup("console=", console_setup);
    2507             : 
    2508             : /**
    2509             :  * add_preferred_console - add a device to the list of preferred consoles.
    2510             :  * @name: device name
    2511             :  * @idx: device index
    2512             :  * @options: options for this console
    2513             :  *
    2514             :  * The last preferred console added will be used for kernel messages
    2515             :  * and stdin/out/err for init.  Normally this is used by console_setup
    2516             :  * above to handle user-supplied console arguments; however it can also
    2517             :  * be used by arch-specific code either to override the user or more
    2518             :  * commonly to provide a default console (ie from PROM variables) when
    2519             :  * the user has not supplied one.
    2520             :  */
    2521           0 : int add_preferred_console(char *name, int idx, char *options)
    2522             : {
    2523           0 :         return __add_preferred_console(name, idx, options, NULL, false);
    2524             : }
    2525             : 
    2526             : bool console_suspend_enabled = true;
    2527             : EXPORT_SYMBOL(console_suspend_enabled);
    2528             : 
    2529           0 : static int __init console_suspend_disable(char *str)
    2530             : {
    2531           0 :         console_suspend_enabled = false;
    2532           0 :         return 1;
    2533             : }
    2534             : __setup("no_console_suspend", console_suspend_disable);
    2535             : module_param_named(console_suspend, console_suspend_enabled,
    2536             :                 bool, S_IRUGO | S_IWUSR);
    2537             : MODULE_PARM_DESC(console_suspend, "suspend console during suspend"
    2538             :         " and hibernate operations");
    2539             : 
    2540             : static bool printk_console_no_auto_verbose;
    2541             : 
    2542           0 : void console_verbose(void)
    2543             : {
    2544           0 :         if (console_loglevel && !printk_console_no_auto_verbose)
    2545           0 :                 console_loglevel = CONSOLE_LOGLEVEL_MOTORMOUTH;
    2546           0 : }
    2547             : EXPORT_SYMBOL_GPL(console_verbose);
    2548             : 
    2549             : module_param_named(console_no_auto_verbose, printk_console_no_auto_verbose, bool, 0644);
    2550             : MODULE_PARM_DESC(console_no_auto_verbose, "Disable console loglevel raise to highest on oops/panic/etc");
    2551             : 
    2552             : /**
    2553             :  * suspend_console - suspend the console subsystem
    2554             :  *
    2555             :  * This disables printk() while we go into suspend states
    2556             :  */
    2557           0 : void suspend_console(void)
    2558             : {
    2559           0 :         if (!console_suspend_enabled)
    2560             :                 return;
    2561           0 :         pr_info("Suspending console(s) (use no_console_suspend to debug)\n");
    2562           0 :         pr_flush(1000, true);
    2563             :         console_lock();
    2564           0 :         console_suspended = 1;
    2565           0 :         up_console_sem();
    2566             : }
    2567             : 
    2568           0 : void resume_console(void)
    2569             : {
    2570           0 :         if (!console_suspend_enabled)
    2571             :                 return;
    2572           0 :         down_console_sem();
    2573           0 :         console_suspended = 0;
    2574           0 :         console_unlock();
    2575             :         pr_flush(1000, true);
    2576             : }
    2577             : 
    2578             : /**
    2579             :  * console_cpu_notify - print deferred console messages after CPU hotplug
    2580             :  * @cpu: unused
    2581             :  *
    2582             :  * If printk() is called from a CPU that is not online yet, the messages
    2583             :  * will be printed on the console only if there are CON_ANYTIME consoles.
    2584             :  * This function is called when a new CPU comes online (or fails to come
    2585             :  * up) or goes offline.
    2586             :  */
    2587           0 : static int console_cpu_notify(unsigned int cpu)
    2588             : {
    2589             :         if (!cpuhp_tasks_frozen) {
    2590             :                 /* If trylock fails, someone else is doing the printing */
    2591           0 :                 if (console_trylock())
    2592           0 :                         console_unlock();
    2593             :         }
    2594           0 :         return 0;
    2595             : }
    2596             : 
    2597             : /**
    2598             :  * console_lock - block the console subsystem from printing
    2599             :  *
    2600             :  * Acquires a lock which guarantees that no consoles will
    2601             :  * be in or enter their write() callback.
    2602             :  *
    2603             :  * Can sleep, returns nothing.
    2604             :  */
    2605           0 : void console_lock(void)
    2606             : {
    2607             :         might_sleep();
    2608             : 
    2609           0 :         down_console_sem();
    2610           0 :         if (console_suspended)
    2611             :                 return;
    2612           0 :         console_locked = 1;
    2613           0 :         console_may_schedule = 1;
    2614             : }
    2615             : EXPORT_SYMBOL(console_lock);
    2616             : 
    2617             : /**
    2618             :  * console_trylock - try to block the console subsystem from printing
    2619             :  *
    2620             :  * Try to acquire a lock which guarantees that no consoles will
    2621             :  * be in or enter their write() callback.
    2622             :  *
    2623             :  * returns 1 on success, and 0 on failure to acquire the lock.
    2624             :  */
    2625         811 : int console_trylock(void)
    2626             : {
    2627         811 :         if (down_trylock_console_sem())
    2628             :                 return 0;
    2629         811 :         if (console_suspended) {
    2630           0 :                 up_console_sem();
    2631           0 :                 return 0;
    2632             :         }
    2633         811 :         console_locked = 1;
    2634         811 :         console_may_schedule = 0;
    2635         811 :         return 1;
    2636             : }
    2637             : EXPORT_SYMBOL(console_trylock);
    2638             : 
    2639           0 : int is_console_locked(void)
    2640             : {
    2641           0 :         return console_locked;
    2642             : }
    2643             : EXPORT_SYMBOL(is_console_locked);
    2644             : 
    2645             : /*
    2646             :  * Return true when this CPU should unlock console_sem without pushing all
    2647             :  * messages to the console. This reduces the chance that the console is
    2648             :  * locked when the panic CPU tries to use it.
    2649             :  */
    2650             : static bool abandon_console_lock_in_panic(void)
    2651             : {
    2652        1388 :         if (!panic_in_progress())
    2653             :                 return false;
    2654             : 
    2655             :         /*
    2656             :          * We can use raw_smp_processor_id() here because it is impossible for
    2657             :          * the task to be migrated to the panic_cpu, or away from it. If
    2658             :          * panic_cpu has already been set, and we're not currently executing on
    2659             :          * that CPU, then we never will be.
    2660             :          */
    2661           0 :         return atomic_read(&panic_cpu) != raw_smp_processor_id();
    2662             : }
    2663             : 
    2664             : /*
    2665             :  * Check if the given console is currently capable and allowed to print
    2666             :  * records.
    2667             :  *
    2668             :  * Requires the console_srcu_read_lock.
    2669             :  */
    2670             : static inline bool console_is_usable(struct console *con)
    2671             : {
    2672        2757 :         short flags = console_srcu_read_flags(con);
    2673             : 
    2674        2757 :         if (!(flags & CON_ENABLED))
    2675             :                 return false;
    2676             : 
    2677        2757 :         if (!con->write)
    2678             :                 return false;
    2679             : 
    2680             :         /*
    2681             :          * Console drivers may assume that per-cpu resources have been
    2682             :          * allocated. So unless they're explicitly marked as being able to
    2683             :          * cope (CON_ANYTIME) don't call them until this CPU is officially up.
    2684             :          */
    2685        2757 :         if (!cpu_online(raw_smp_processor_id()) && !(flags & CON_ANYTIME))
    2686             :                 return false;
    2687             : 
    2688             :         return true;
    2689             : }
    2690             : 
    2691             : static void __console_unlock(void)
    2692             : {
    2693         811 :         console_locked = 0;
    2694         811 :         up_console_sem();
    2695             : }
    2696             : 
    2697             : /*
    2698             :  * Prepend the message in @pmsg->pbufs->outbuf with a "dropped message". This
    2699             :  * is achieved by shifting the existing message over and inserting the dropped
    2700             :  * message.
    2701             :  *
    2702             :  * @pmsg is the printk message to prepend.
    2703             :  *
    2704             :  * @dropped is the dropped count to report in the dropped message.
    2705             :  *
    2706             :  * If the message text in @pmsg->pbufs->outbuf does not have enough space for
    2707             :  * the dropped message, the message text will be sufficiently truncated.
    2708             :  *
    2709             :  * If @pmsg->pbufs->outbuf is modified, @pmsg->outbuf_len is updated.
    2710             :  */
    2711             : #ifdef CONFIG_PRINTK
    2712           0 : static void console_prepend_dropped(struct printk_message *pmsg, unsigned long dropped)
    2713             : {
    2714           0 :         struct printk_buffers *pbufs = pmsg->pbufs;
    2715           0 :         const size_t scratchbuf_sz = sizeof(pbufs->scratchbuf);
    2716           0 :         const size_t outbuf_sz = sizeof(pbufs->outbuf);
    2717           0 :         char *scratchbuf = &pbufs->scratchbuf[0];
    2718           0 :         char *outbuf = &pbufs->outbuf[0];
    2719             :         size_t len;
    2720             : 
    2721           0 :         len = scnprintf(scratchbuf, scratchbuf_sz,
    2722             :                        "** %lu printk messages dropped **\n", dropped);
    2723             : 
    2724             :         /*
    2725             :          * Make sure outbuf is sufficiently large before prepending.
    2726             :          * Keep at least the prefix when the message must be truncated.
    2727             :          * It is a rather theoretical problem when someone tries to
    2728             :          * use a minimalist buffer.
    2729             :          */
    2730           0 :         if (WARN_ON_ONCE(len + PRINTK_PREFIX_MAX >= outbuf_sz))
    2731             :                 return;
    2732             : 
    2733           0 :         if (pmsg->outbuf_len + len >= outbuf_sz) {
    2734             :                 /* Truncate the message, but keep it terminated. */
    2735           0 :                 pmsg->outbuf_len = outbuf_sz - (len + 1);
    2736           0 :                 outbuf[pmsg->outbuf_len] = 0;
    2737             :         }
    2738             : 
    2739           0 :         memmove(outbuf + len, outbuf, pmsg->outbuf_len + 1);
    2740           0 :         memcpy(outbuf, scratchbuf, len);
    2741           0 :         pmsg->outbuf_len += len;
    2742             : }
    2743             : #else
    2744             : #define console_prepend_dropped(pmsg, dropped)
    2745             : #endif /* CONFIG_PRINTK */
    2746             : 
    2747             : /*
    2748             :  * Read and format the specified record (or a later record if the specified
    2749             :  * record is not available).
    2750             :  *
    2751             :  * @pmsg will contain the formatted result. @pmsg->pbufs must point to a
    2752             :  * struct printk_buffers.
    2753             :  *
    2754             :  * @seq is the record to read and format. If it is not available, the next
    2755             :  * valid record is read.
    2756             :  *
    2757             :  * @is_extended specifies if the message should be formatted for extended
    2758             :  * console output.
    2759             :  *
    2760             :  * @may_supress specifies if records may be skipped based on loglevel.
    2761             :  *
    2762             :  * Returns false if no record is available. Otherwise true and all fields
    2763             :  * of @pmsg are valid. (See the documentation of struct printk_message
    2764             :  * for information about the @pmsg fields.)
    2765             :  */
    2766        2757 : static bool printk_get_next_message(struct printk_message *pmsg, u64 seq,
    2767             :                                     bool is_extended, bool may_suppress)
    2768             : {
    2769             :         static int panic_console_dropped;
    2770             : 
    2771        2757 :         struct printk_buffers *pbufs = pmsg->pbufs;
    2772        2757 :         const size_t scratchbuf_sz = sizeof(pbufs->scratchbuf);
    2773        2757 :         const size_t outbuf_sz = sizeof(pbufs->outbuf);
    2774        2757 :         char *scratchbuf = &pbufs->scratchbuf[0];
    2775        2757 :         char *outbuf = &pbufs->outbuf[0];
    2776             :         struct printk_info info;
    2777             :         struct printk_record r;
    2778        2757 :         size_t len = 0;
    2779             : 
    2780             :         /*
    2781             :          * Formatting extended messages requires a separate buffer, so use the
    2782             :          * scratch buffer to read in the ringbuffer text.
    2783             :          *
    2784             :          * Formatting normal messages is done in-place, so read the ringbuffer
    2785             :          * text directly into the output buffer.
    2786             :          */
    2787        2757 :         if (is_extended)
    2788           0 :                 prb_rec_init_rd(&r, &info, scratchbuf, scratchbuf_sz);
    2789             :         else
    2790        2757 :                 prb_rec_init_rd(&r, &info, outbuf, outbuf_sz);
    2791             : 
    2792        2757 :         if (!prb_read_valid(prb, seq, &r))
    2793             :                 return false;
    2794             : 
    2795        1388 :         pmsg->seq = r.info->seq;
    2796        1388 :         pmsg->dropped = r.info->seq - seq;
    2797             : 
    2798             :         /*
    2799             :          * Check for dropped messages in panic here so that printk
    2800             :          * suppression can occur as early as possible if necessary.
    2801             :          */
    2802        1388 :         if (pmsg->dropped &&
    2803           0 :             panic_in_progress() &&
    2804           0 :             panic_console_dropped++ > 10) {
    2805           0 :                 suppress_panic_printk = 1;
    2806           0 :                 pr_warn_once("Too many dropped messages. Suppress messages on non-panic CPUs to prevent livelock.\n");
    2807             :         }
    2808             : 
    2809             :         /* Skip record that has level above the console loglevel. */
    2810        2776 :         if (may_suppress && suppress_message_printing(r.info->level))
    2811             :                 goto out;
    2812             : 
    2813        1386 :         if (is_extended) {
    2814           0 :                 len = info_print_ext_header(outbuf, outbuf_sz, r.info);
    2815           0 :                 len += msg_print_ext_body(outbuf + len, outbuf_sz - len,
    2816           0 :                                           &r.text_buf[0], r.info->text_len, &r.info->dev_info);
    2817             :         } else {
    2818        1386 :                 len = record_print_text(&r, console_msg_format & MSG_FORMAT_SYSLOG, printk_time);
    2819             :         }
    2820             : out:
    2821        1388 :         pmsg->outbuf_len = len;
    2822        1388 :         return true;
    2823             : }
    2824             : 
    2825             : /*
    2826             :  * Print one record for the given console. The record printed is whatever
    2827             :  * record is the next available record for the given console.
    2828             :  *
    2829             :  * @handover will be set to true if a printk waiter has taken over the
    2830             :  * console_lock, in which case the caller is no longer holding both the
    2831             :  * console_lock and the SRCU read lock. Otherwise it is set to false.
    2832             :  *
    2833             :  * @cookie is the cookie from the SRCU read lock.
    2834             :  *
    2835             :  * Returns false if the given console has no next record to print, otherwise
    2836             :  * true.
    2837             :  *
    2838             :  * Requires the console_lock and the SRCU read lock.
    2839             :  */
    2840        2757 : static bool console_emit_next_record(struct console *con, bool *handover, int cookie)
    2841             : {
    2842             :         static struct printk_buffers pbufs;
    2843             : 
    2844        2757 :         bool is_extended = console_srcu_read_flags(con) & CON_EXTENDED;
    2845        2757 :         char *outbuf = &pbufs.outbuf[0];
    2846        2757 :         struct printk_message pmsg = {
    2847             :                 .pbufs = &pbufs,
    2848             :         };
    2849             :         unsigned long flags;
    2850             : 
    2851        2757 :         *handover = false;
    2852             : 
    2853        2757 :         if (!printk_get_next_message(&pmsg, con->seq, is_extended, true))
    2854             :                 return false;
    2855             : 
    2856        1388 :         con->dropped += pmsg.dropped;
    2857             : 
    2858             :         /* Skip messages of formatted length 0. */
    2859        1388 :         if (pmsg.outbuf_len == 0) {
    2860           2 :                 con->seq = pmsg.seq + 1;
    2861           2 :                 goto skip;
    2862             :         }
    2863             : 
    2864        1386 :         if (con->dropped && !is_extended) {
    2865           0 :                 console_prepend_dropped(&pmsg, con->dropped);
    2866           0 :                 con->dropped = 0;
    2867             :         }
    2868             : 
    2869             :         /*
    2870             :          * While actively printing out messages, if another printk()
    2871             :          * were to occur on another CPU, it may wait for this one to
    2872             :          * finish. This task can not be preempted if there is a
    2873             :          * waiter waiting to take over.
    2874             :          *
    2875             :          * Interrupts are disabled because the hand over to a waiter
    2876             :          * must not be interrupted until the hand over is completed
    2877             :          * (@console_waiter is cleared).
    2878             :          */
    2879        1386 :         printk_safe_enter_irqsave(flags);
    2880        1386 :         console_lock_spinning_enable();
    2881             : 
    2882             :         /* Do not trace print latency. */
    2883             :         stop_critical_timings();
    2884             : 
    2885             :         /* Write everything out to the hardware. */
    2886        1386 :         con->write(con, outbuf, pmsg.outbuf_len);
    2887             : 
    2888             :         start_critical_timings();
    2889             : 
    2890        1386 :         con->seq = pmsg.seq + 1;
    2891             : 
    2892        1386 :         *handover = console_lock_spinning_disable_and_check(cookie);
    2893        1386 :         printk_safe_exit_irqrestore(flags);
    2894             : skip:
    2895             :         return true;
    2896             : }
    2897             : 
    2898             : /*
    2899             :  * Print out all remaining records to all consoles.
    2900             :  *
    2901             :  * @do_cond_resched is set by the caller. It can be true only in schedulable
    2902             :  * context.
    2903             :  *
    2904             :  * @next_seq is set to the sequence number after the last available record.
    2905             :  * The value is valid only when this function returns true. It means that all
    2906             :  * usable consoles are completely flushed.
    2907             :  *
    2908             :  * @handover will be set to true if a printk waiter has taken over the
    2909             :  * console_lock, in which case the caller is no longer holding the
    2910             :  * console_lock. Otherwise it is set to false.
    2911             :  *
    2912             :  * Returns true when there was at least one usable console and all messages
    2913             :  * were flushed to all usable consoles. A returned false informs the caller
    2914             :  * that everything was not flushed (either there were no usable consoles or
    2915             :  * another context has taken over printing or it is a panic situation and this
    2916             :  * is not the panic CPU). Regardless the reason, the caller should assume it
    2917             :  * is not useful to immediately try again.
    2918             :  *
    2919             :  * Requires the console_lock.
    2920             :  */
    2921         811 : static bool console_flush_all(bool do_cond_resched, u64 *next_seq, bool *handover)
    2922             : {
    2923         811 :         bool any_usable = false;
    2924             :         struct console *con;
    2925             :         bool any_progress;
    2926             :         int cookie;
    2927             : 
    2928         811 :         *next_seq = 0;
    2929         811 :         *handover = false;
    2930             : 
    2931             :         do {
    2932        1559 :                 any_progress = false;
    2933             : 
    2934        1559 :                 cookie = console_srcu_read_lock();
    2935        4316 :                 for_each_console_srcu(con) {
    2936             :                         bool progress;
    2937             : 
    2938        2757 :                         if (!console_is_usable(con))
    2939           0 :                                 continue;
    2940        2757 :                         any_usable = true;
    2941             : 
    2942        2757 :                         progress = console_emit_next_record(con, handover, cookie);
    2943             : 
    2944             :                         /*
    2945             :                          * If a handover has occurred, the SRCU read lock
    2946             :                          * is already released.
    2947             :                          */
    2948        2757 :                         if (*handover)
    2949             :                                 return false;
    2950             : 
    2951             :                         /* Track the next of the highest seq flushed. */
    2952        2757 :                         if (con->seq > *next_seq)
    2953         839 :                                 *next_seq = con->seq;
    2954             : 
    2955        2757 :                         if (!progress)
    2956        1369 :                                 continue;
    2957        1388 :                         any_progress = true;
    2958             : 
    2959             :                         /* Allow panic_cpu to take over the consoles safely. */
    2960        1388 :                         if (abandon_console_lock_in_panic())
    2961             :                                 goto abandon;
    2962             : 
    2963        1388 :                         if (do_cond_resched)
    2964           0 :                                 cond_resched();
    2965             :                 }
    2966        1559 :                 console_srcu_read_unlock(cookie);
    2967        1559 :         } while (any_progress);
    2968             : 
    2969             :         return any_usable;
    2970             : 
    2971             : abandon:
    2972           0 :         console_srcu_read_unlock(cookie);
    2973           0 :         return false;
    2974             : }
    2975             : 
    2976             : /**
    2977             :  * console_unlock - unblock the console subsystem from printing
    2978             :  *
    2979             :  * Releases the console_lock which the caller holds to block printing of
    2980             :  * the console subsystem.
    2981             :  *
    2982             :  * While the console_lock was held, console output may have been buffered
    2983             :  * by printk().  If this is the case, console_unlock(); emits
    2984             :  * the output prior to releasing the lock.
    2985             :  *
    2986             :  * console_unlock(); may be called from any context.
    2987             :  */
    2988         811 : void console_unlock(void)
    2989             : {
    2990             :         bool do_cond_resched;
    2991             :         bool handover;
    2992             :         bool flushed;
    2993             :         u64 next_seq;
    2994             : 
    2995         811 :         if (console_suspended) {
    2996           0 :                 up_console_sem();
    2997           0 :                 return;
    2998             :         }
    2999             : 
    3000             :         /*
    3001             :          * Console drivers are called with interrupts disabled, so
    3002             :          * @console_may_schedule should be cleared before; however, we may
    3003             :          * end up dumping a lot of lines, for example, if called from
    3004             :          * console registration path, and should invoke cond_resched()
    3005             :          * between lines if allowable.  Not doing so can cause a very long
    3006             :          * scheduling stall on a slow console leading to RCU stall and
    3007             :          * softlockup warnings which exacerbate the issue with more
    3008             :          * messages practically incapacitating the system. Therefore, create
    3009             :          * a local to use for the printing loop.
    3010             :          */
    3011         811 :         do_cond_resched = console_may_schedule;
    3012             : 
    3013             :         do {
    3014         811 :                 console_may_schedule = 0;
    3015             : 
    3016         811 :                 flushed = console_flush_all(do_cond_resched, &next_seq, &handover);
    3017         811 :                 if (!handover)
    3018             :                         __console_unlock();
    3019             : 
    3020             :                 /*
    3021             :                  * Abort if there was a failure to flush all messages to all
    3022             :                  * usable consoles. Either it is not possible to flush (in
    3023             :                  * which case it would be an infinite loop of retrying) or
    3024             :                  * another context has taken over printing.
    3025             :                  */
    3026         811 :                 if (!flushed)
    3027             :                         break;
    3028             : 
    3029             :                 /*
    3030             :                  * Some context may have added new records after
    3031             :                  * console_flush_all() but before unlocking the console.
    3032             :                  * Re-check if there is a new record to flush. If the trylock
    3033             :                  * fails, another context is already handling the printing.
    3034             :                  */
    3035         685 :         } while (prb_read_valid(prb, next_seq, NULL) && console_trylock());
    3036             : }
    3037             : EXPORT_SYMBOL(console_unlock);
    3038             : 
    3039             : /**
    3040             :  * console_conditional_schedule - yield the CPU if required
    3041             :  *
    3042             :  * If the console code is currently allowed to sleep, and
    3043             :  * if this CPU should yield the CPU to another task, do
    3044             :  * so here.
    3045             :  *
    3046             :  * Must be called within console_lock();.
    3047             :  */
    3048           0 : void __sched console_conditional_schedule(void)
    3049             : {
    3050           0 :         if (console_may_schedule)
    3051           0 :                 cond_resched();
    3052           0 : }
    3053             : EXPORT_SYMBOL(console_conditional_schedule);
    3054             : 
    3055           0 : void console_unblank(void)
    3056             : {
    3057             :         struct console *c;
    3058             :         int cookie;
    3059             : 
    3060             :         /*
    3061             :          * Stop console printing because the unblank() callback may
    3062             :          * assume the console is not within its write() callback.
    3063             :          *
    3064             :          * If @oops_in_progress is set, this may be an atomic context.
    3065             :          * In that case, attempt a trylock as best-effort.
    3066             :          */
    3067           0 :         if (oops_in_progress) {
    3068           0 :                 if (down_trylock_console_sem() != 0)
    3069             :                         return;
    3070             :         } else
    3071             :                 console_lock();
    3072             : 
    3073           0 :         console_locked = 1;
    3074           0 :         console_may_schedule = 0;
    3075             : 
    3076           0 :         cookie = console_srcu_read_lock();
    3077           0 :         for_each_console_srcu(c) {
    3078           0 :                 if ((console_srcu_read_flags(c) & CON_ENABLED) && c->unblank)
    3079           0 :                         c->unblank();
    3080             :         }
    3081           0 :         console_srcu_read_unlock(cookie);
    3082             : 
    3083           0 :         console_unlock();
    3084             : 
    3085           0 :         if (!oops_in_progress)
    3086             :                 pr_flush(1000, true);
    3087             : }
    3088             : 
    3089             : /**
    3090             :  * console_flush_on_panic - flush console content on panic
    3091             :  * @mode: flush all messages in buffer or just the pending ones
    3092             :  *
    3093             :  * Immediately output all pending messages no matter what.
    3094             :  */
    3095           0 : void console_flush_on_panic(enum con_flush_mode mode)
    3096             : {
    3097             :         /*
    3098             :          * If someone else is holding the console lock, trylock will fail
    3099             :          * and may_schedule may be set.  Ignore and proceed to unlock so
    3100             :          * that messages are flushed out.  As this can be called from any
    3101             :          * context and we don't want to get preempted while flushing,
    3102             :          * ensure may_schedule is cleared.
    3103             :          */
    3104           0 :         console_trylock();
    3105           0 :         console_may_schedule = 0;
    3106             : 
    3107           0 :         if (mode == CONSOLE_REPLAY_ALL) {
    3108             :                 struct console *c;
    3109             :                 int cookie;
    3110             :                 u64 seq;
    3111             : 
    3112           0 :                 seq = prb_first_valid_seq(prb);
    3113             : 
    3114           0 :                 cookie = console_srcu_read_lock();
    3115           0 :                 for_each_console_srcu(c) {
    3116             :                         /*
    3117             :                          * If the above console_trylock() failed, this is an
    3118             :                          * unsynchronized assignment. But in that case, the
    3119             :                          * kernel is in "hope and pray" mode anyway.
    3120             :                          */
    3121           0 :                         c->seq = seq;
    3122             :                 }
    3123             :                 console_srcu_read_unlock(cookie);
    3124             :         }
    3125           0 :         console_unlock();
    3126           0 : }
    3127             : 
    3128             : /*
    3129             :  * Return the console tty driver structure and its associated index
    3130             :  */
    3131           0 : struct tty_driver *console_device(int *index)
    3132             : {
    3133             :         struct console *c;
    3134           0 :         struct tty_driver *driver = NULL;
    3135             :         int cookie;
    3136             : 
    3137             :         /*
    3138             :          * Take console_lock to serialize device() callback with
    3139             :          * other console operations. For example, fg_console is
    3140             :          * modified under console_lock when switching vt.
    3141             :          */
    3142             :         console_lock();
    3143             : 
    3144           0 :         cookie = console_srcu_read_lock();
    3145           0 :         for_each_console_srcu(c) {
    3146           0 :                 if (!c->device)
    3147           0 :                         continue;
    3148           0 :                 driver = c->device(c, index);
    3149           0 :                 if (driver)
    3150             :                         break;
    3151             :         }
    3152           0 :         console_srcu_read_unlock(cookie);
    3153             : 
    3154           0 :         console_unlock();
    3155           0 :         return driver;
    3156             : }
    3157             : 
    3158             : /*
    3159             :  * Prevent further output on the passed console device so that (for example)
    3160             :  * serial drivers can disable console output before suspending a port, and can
    3161             :  * re-enable output afterwards.
    3162             :  */
    3163           0 : void console_stop(struct console *console)
    3164             : {
    3165           0 :         __pr_flush(console, 1000, true);
    3166             :         console_list_lock();
    3167           0 :         console_srcu_write_flags(console, console->flags & ~CON_ENABLED);
    3168             :         console_list_unlock();
    3169             : 
    3170             :         /*
    3171             :          * Ensure that all SRCU list walks have completed. All contexts must
    3172             :          * be able to see that this console is disabled so that (for example)
    3173             :          * the caller can suspend the port without risk of another context
    3174             :          * using the port.
    3175             :          */
    3176           0 :         synchronize_srcu(&console_srcu);
    3177           0 : }
    3178             : EXPORT_SYMBOL(console_stop);
    3179             : 
    3180           0 : void console_start(struct console *console)
    3181             : {
    3182             :         console_list_lock();
    3183           0 :         console_srcu_write_flags(console, console->flags | CON_ENABLED);
    3184             :         console_list_unlock();
    3185           0 :         __pr_flush(console, 1000, true);
    3186           0 : }
    3187             : EXPORT_SYMBOL(console_start);
    3188             : 
    3189             : static int __read_mostly keep_bootcon;
    3190             : 
    3191           0 : static int __init keep_bootcon_setup(char *str)
    3192             : {
    3193           0 :         keep_bootcon = 1;
    3194           0 :         pr_info("debug: skip boot console de-registration.\n");
    3195             : 
    3196           0 :         return 0;
    3197             : }
    3198             : 
    3199             : early_param("keep_bootcon", keep_bootcon_setup);
    3200             : 
    3201             : /*
    3202             :  * This is called by register_console() to try to match
    3203             :  * the newly registered console with any of the ones selected
    3204             :  * by either the command line or add_preferred_console() and
    3205             :  * setup/enable it.
    3206             :  *
    3207             :  * Care need to be taken with consoles that are statically
    3208             :  * enabled such as netconsole
    3209             :  */
    3210           3 : static int try_enable_preferred_console(struct console *newcon,
    3211             :                                         bool user_specified)
    3212             : {
    3213             :         struct console_cmdline *c;
    3214             :         int i, err;
    3215             : 
    3216           8 :         for (i = 0, c = console_cmdline;
    3217           5 :              i < MAX_CMDLINECONSOLES && c->name[0];
    3218           2 :              i++, c++) {
    3219           3 :                 if (c->user_specified != user_specified)
    3220           1 :                         continue;
    3221           2 :                 if (!newcon->match ||
    3222           0 :                     newcon->match(newcon, c->name, c->index, c->options) != 0) {
    3223             :                         /* default matching */
    3224             :                         BUILD_BUG_ON(sizeof(c->name) != sizeof(newcon->name));
    3225           2 :                         if (strcmp(c->name, newcon->name) != 0)
    3226           1 :                                 continue;
    3227           1 :                         if (newcon->index >= 0 &&
    3228           0 :                             newcon->index != c->index)
    3229           0 :                                 continue;
    3230           1 :                         if (newcon->index < 0)
    3231           1 :                                 newcon->index = c->index;
    3232             : 
    3233           1 :                         if (_braille_register_console(newcon, c))
    3234             :                                 return 0;
    3235             : 
    3236           2 :                         if (newcon->setup &&
    3237           1 :                             (err = newcon->setup(newcon, c->options)) != 0)
    3238             :                                 return err;
    3239             :                 }
    3240           1 :                 newcon->flags |= CON_ENABLED;
    3241           1 :                 if (i == preferred_console)
    3242           1 :                         newcon->flags |= CON_CONSDEV;
    3243             :                 return 0;
    3244             :         }
    3245             : 
    3246             :         /*
    3247             :          * Some consoles, such as pstore and netconsole, can be enabled even
    3248             :          * without matching. Accept the pre-enabled consoles only when match()
    3249             :          * and setup() had a chance to be called.
    3250             :          */
    3251           2 :         if (newcon->flags & CON_ENABLED && c->user_specified ==       user_specified)
    3252             :                 return 0;
    3253             : 
    3254           1 :         return -ENOENT;
    3255             : }
    3256             : 
    3257             : /* Try to enable the console unconditionally */
    3258           0 : static void try_enable_default_console(struct console *newcon)
    3259             : {
    3260           0 :         if (newcon->index < 0)
    3261           0 :                 newcon->index = 0;
    3262             : 
    3263           0 :         if (newcon->setup && newcon->setup(newcon, NULL) != 0)
    3264             :                 return;
    3265             : 
    3266           0 :         newcon->flags |= CON_ENABLED;
    3267             : 
    3268           0 :         if (newcon->device)
    3269           0 :                 newcon->flags |= CON_CONSDEV;
    3270             : }
    3271             : 
    3272             : #define con_printk(lvl, con, fmt, ...)                  \
    3273             :         printk(lvl pr_fmt("%sconsole [%s%d] " fmt),   \
    3274             :                (con->flags & CON_BOOT) ? "boot" : "",        \
    3275             :                con->name, con->index, ##__VA_ARGS__)
    3276             : 
    3277           2 : static void console_init_seq(struct console *newcon, bool bootcon_registered)
    3278             : {
    3279             :         struct console *con;
    3280             :         bool handover;
    3281             : 
    3282           2 :         if (newcon->flags & (CON_PRINTBUFFER | CON_BOOT)) {
    3283             :                 /* Get a consistent copy of @syslog_seq. */
    3284           1 :                 mutex_lock(&syslog_lock);
    3285           1 :                 newcon->seq = syslog_seq;
    3286           1 :                 mutex_unlock(&syslog_lock);
    3287             :         } else {
    3288             :                 /* Begin with next message added to ringbuffer. */
    3289           1 :                 newcon->seq = prb_next_seq(prb);
    3290             : 
    3291             :                 /*
    3292             :                  * If any enabled boot consoles are due to be unregistered
    3293             :                  * shortly, some may not be caught up and may be the same
    3294             :                  * device as @newcon. Since it is not known which boot console
    3295             :                  * is the same device, flush all consoles and, if necessary,
    3296             :                  * start with the message of the enabled boot console that is
    3297             :                  * the furthest behind.
    3298             :                  */
    3299           1 :                 if (bootcon_registered && !keep_bootcon) {
    3300             :                         /*
    3301             :                          * Hold the console_lock to stop console printing and
    3302             :                          * guarantee safe access to console->seq.
    3303             :                          */
    3304             :                         console_lock();
    3305             : 
    3306             :                         /*
    3307             :                          * Flush all consoles and set the console to start at
    3308             :                          * the next unprinted sequence number.
    3309             :                          */
    3310           0 :                         if (!console_flush_all(true, &newcon->seq, &handover)) {
    3311             :                                 /*
    3312             :                                  * Flushing failed. Just choose the lowest
    3313             :                                  * sequence of the enabled boot consoles.
    3314             :                                  */
    3315             : 
    3316             :                                 /*
    3317             :                                  * If there was a handover, this context no
    3318             :                                  * longer holds the console_lock.
    3319             :                                  */
    3320           0 :                                 if (handover)
    3321             :                                         console_lock();
    3322             : 
    3323           0 :                                 newcon->seq = prb_next_seq(prb);
    3324           0 :                                 for_each_console(con) {
    3325           0 :                                         if ((con->flags & CON_BOOT) &&
    3326           0 :                                             (con->flags & CON_ENABLED) &&
    3327           0 :                                             con->seq < newcon->seq) {
    3328           0 :                                                 newcon->seq = con->seq;
    3329             :                                         }
    3330             :                                 }
    3331             :                         }
    3332             : 
    3333           0 :                         console_unlock();
    3334             :                 }
    3335             :         }
    3336           2 : }
    3337             : 
    3338             : #define console_first()                         \
    3339             :         hlist_entry(console_list.first, struct console, node)
    3340             : 
    3341             : static int unregister_console_locked(struct console *console);
    3342             : 
    3343             : /*
    3344             :  * The console driver calls this routine during kernel initialization
    3345             :  * to register the console printing procedure with printk() and to
    3346             :  * print any messages that were printed by the kernel before the
    3347             :  * console driver was initialized.
    3348             :  *
    3349             :  * This can happen pretty early during the boot process (because of
    3350             :  * early_printk) - sometimes before setup_arch() completes - be careful
    3351             :  * of what kernel features are used - they may not be initialised yet.
    3352             :  *
    3353             :  * There are two types of consoles - bootconsoles (early_printk) and
    3354             :  * "real" consoles (everything which is not a bootconsole) which are
    3355             :  * handled differently.
    3356             :  *  - Any number of bootconsoles can be registered at any time.
    3357             :  *  - As soon as a "real" console is registered, all bootconsoles
    3358             :  *    will be unregistered automatically.
    3359             :  *  - Once a "real" console is registered, any attempt to register a
    3360             :  *    bootconsoles will be rejected
    3361             :  */
    3362           2 : void register_console(struct console *newcon)
    3363             : {
    3364             :         struct console *con;
    3365           2 :         bool bootcon_registered = false;
    3366           2 :         bool realcon_registered = false;
    3367             :         int err;
    3368             : 
    3369             :         console_list_lock();
    3370             : 
    3371           3 :         for_each_console(con) {
    3372           1 :                 if (WARN(con == newcon, "console '%s%d' already registered\n",
    3373             :                                          con->name, con->index)) {
    3374             :                         goto unlock;
    3375             :                 }
    3376             : 
    3377           1 :                 if (con->flags & CON_BOOT)
    3378             :                         bootcon_registered = true;
    3379             :                 else
    3380           1 :                         realcon_registered = true;
    3381             :         }
    3382             : 
    3383             :         /* Do not register boot consoles when there already is a real one. */
    3384           2 :         if ((newcon->flags & CON_BOOT) && realcon_registered) {
    3385           0 :                 pr_info("Too late to register bootconsole %s%d\n",
    3386             :                         newcon->name, newcon->index);
    3387           0 :                 goto unlock;
    3388             :         }
    3389             : 
    3390             :         /*
    3391             :          * See if we want to enable this console driver by default.
    3392             :          *
    3393             :          * Nope when a console is preferred by the command line, device
    3394             :          * tree, or SPCR.
    3395             :          *
    3396             :          * The first real console with tty binding (driver) wins. More
    3397             :          * consoles might get enabled before the right one is found.
    3398             :          *
    3399             :          * Note that a console with tty binding will have CON_CONSDEV
    3400             :          * flag set and will be first in the list.
    3401             :          */
    3402           2 :         if (preferred_console < 0) {
    3403           0 :                 if (hlist_empty(&console_list) || !console_first()->device ||
    3404           0 :                     console_first()->flags & CON_BOOT) {
    3405           0 :                         try_enable_default_console(newcon);
    3406             :                 }
    3407             :         }
    3408             : 
    3409             :         /* See if this console matches one we selected on the command line */
    3410           2 :         err = try_enable_preferred_console(newcon, true);
    3411             : 
    3412             :         /* If not, try to match against the platform default(s) */
    3413           2 :         if (err == -ENOENT)
    3414           1 :                 err = try_enable_preferred_console(newcon, false);
    3415             : 
    3416             :         /* printk() messages are not printed to the Braille console. */
    3417           2 :         if (err || newcon->flags & CON_BRL)
    3418             :                 goto unlock;
    3419             : 
    3420             :         /*
    3421             :          * If we have a bootconsole, and are switching to a real console,
    3422             :          * don't print everything out again, since when the boot console, and
    3423             :          * the real console are the same physical device, it's annoying to
    3424             :          * see the beginning boot messages twice
    3425             :          */
    3426           2 :         if (bootcon_registered &&
    3427             :             ((newcon->flags & (CON_CONSDEV | CON_BOOT)) == CON_CONSDEV)) {
    3428           0 :                 newcon->flags &= ~CON_PRINTBUFFER;
    3429             :         }
    3430             : 
    3431           2 :         newcon->dropped = 0;
    3432           2 :         console_init_seq(newcon, bootcon_registered);
    3433             : 
    3434             :         /*
    3435             :          * Put this console in the list - keep the
    3436             :          * preferred driver at the head of the list.
    3437             :          */
    3438           2 :         if (hlist_empty(&console_list)) {
    3439             :                 /* Ensure CON_CONSDEV is always set for the head. */
    3440           1 :                 newcon->flags |= CON_CONSDEV;
    3441           1 :                 hlist_add_head_rcu(&newcon->node, &console_list);
    3442             : 
    3443           1 :         } else if (newcon->flags & CON_CONSDEV) {
    3444             :                 /* Only the new head can have CON_CONSDEV set. */
    3445           0 :                 console_srcu_write_flags(console_first(), console_first()->flags & ~CON_CONSDEV);
    3446           0 :                 hlist_add_head_rcu(&newcon->node, &console_list);
    3447             : 
    3448             :         } else {
    3449           1 :                 hlist_add_behind_rcu(&newcon->node, console_list.first);
    3450             :         }
    3451             : 
    3452             :         /*
    3453             :          * No need to synchronize SRCU here! The caller does not rely
    3454             :          * on all contexts being able to see the new console before
    3455             :          * register_console() completes.
    3456             :          */
    3457             : 
    3458           2 :         console_sysfs_notify();
    3459             : 
    3460             :         /*
    3461             :          * By unregistering the bootconsoles after we enable the real console
    3462             :          * we get the "console xxx enabled" message on all the consoles -
    3463             :          * boot consoles, real consoles, etc - this is to ensure that end
    3464             :          * users know there might be something in the kernel's log buffer that
    3465             :          * went to the bootconsole (that they do not see on the real console)
    3466             :          */
    3467           2 :         con_printk(KERN_INFO, newcon, "enabled\n");
    3468           2 :         if (bootcon_registered &&
    3469           0 :             ((newcon->flags & (CON_CONSDEV | CON_BOOT)) == CON_CONSDEV) &&
    3470           0 :             !keep_bootcon) {
    3471             :                 struct hlist_node *tmp;
    3472             : 
    3473           0 :                 hlist_for_each_entry_safe(con, tmp, &console_list, node) {
    3474           0 :                         if (con->flags & CON_BOOT)
    3475           0 :                                 unregister_console_locked(con);
    3476             :                 }
    3477             :         }
    3478             : unlock:
    3479             :         console_list_unlock();
    3480           2 : }
    3481             : EXPORT_SYMBOL(register_console);
    3482             : 
    3483             : /* Must be called under console_list_lock(). */
    3484           1 : static int unregister_console_locked(struct console *console)
    3485             : {
    3486             :         int res;
    3487             : 
    3488             :         lockdep_assert_console_list_lock_held();
    3489             : 
    3490           1 :         con_printk(KERN_INFO, console, "disabled\n");
    3491             : 
    3492           1 :         res = _braille_unregister_console(console);
    3493             :         if (res < 0)
    3494             :                 return res;
    3495             :         if (res > 0)
    3496             :                 return 0;
    3497             : 
    3498             :         /* Disable it unconditionally */
    3499           2 :         console_srcu_write_flags(console, console->flags & ~CON_ENABLED);
    3500             : 
    3501           1 :         if (!console_is_registered_locked(console))
    3502             :                 return -ENODEV;
    3503             : 
    3504           0 :         hlist_del_init_rcu(&console->node);
    3505             : 
    3506             :         /*
    3507             :          * <HISTORICAL>
    3508             :          * If this isn't the last console and it has CON_CONSDEV set, we
    3509             :          * need to set it on the next preferred console.
    3510             :          * </HISTORICAL>
    3511             :          *
    3512             :          * The above makes no sense as there is no guarantee that the next
    3513             :          * console has any device attached. Oh well....
    3514             :          */
    3515           0 :         if (!hlist_empty(&console_list) && console->flags & CON_CONSDEV)
    3516           0 :                 console_srcu_write_flags(console_first(), console_first()->flags | CON_CONSDEV);
    3517             : 
    3518             :         /*
    3519             :          * Ensure that all SRCU list walks have completed. All contexts
    3520             :          * must not be able to see this console in the list so that any
    3521             :          * exit/cleanup routines can be performed safely.
    3522             :          */
    3523           0 :         synchronize_srcu(&console_srcu);
    3524             : 
    3525           0 :         console_sysfs_notify();
    3526             : 
    3527           0 :         if (console->exit)
    3528           0 :                 res = console->exit(console);
    3529             : 
    3530             :         return res;
    3531             : }
    3532             : 
    3533           1 : int unregister_console(struct console *console)
    3534             : {
    3535             :         int res;
    3536             : 
    3537             :         console_list_lock();
    3538           1 :         res = unregister_console_locked(console);
    3539             :         console_list_unlock();
    3540           1 :         return res;
    3541             : }
    3542             : EXPORT_SYMBOL(unregister_console);
    3543             : 
    3544             : /**
    3545             :  * console_force_preferred_locked - force a registered console preferred
    3546             :  * @con: The registered console to force preferred.
    3547             :  *
    3548             :  * Must be called under console_list_lock().
    3549             :  */
    3550           0 : void console_force_preferred_locked(struct console *con)
    3551             : {
    3552             :         struct console *cur_pref_con;
    3553             : 
    3554           0 :         if (!console_is_registered_locked(con))
    3555             :                 return;
    3556             : 
    3557           0 :         cur_pref_con = console_first();
    3558             : 
    3559             :         /* Already preferred? */
    3560           0 :         if (cur_pref_con == con)
    3561             :                 return;
    3562             : 
    3563             :         /*
    3564             :          * Delete, but do not re-initialize the entry. This allows the console
    3565             :          * to continue to appear registered (via any hlist_unhashed_lockless()
    3566             :          * checks), even though it was briefly removed from the console list.
    3567             :          */
    3568           0 :         hlist_del_rcu(&con->node);
    3569             : 
    3570             :         /*
    3571             :          * Ensure that all SRCU list walks have completed so that the console
    3572             :          * can be added to the beginning of the console list and its forward
    3573             :          * list pointer can be re-initialized.
    3574             :          */
    3575           0 :         synchronize_srcu(&console_srcu);
    3576             : 
    3577           0 :         con->flags |= CON_CONSDEV;
    3578           0 :         WARN_ON(!con->device);
    3579             : 
    3580             :         /* Only the new head can have CON_CONSDEV set. */
    3581           0 :         console_srcu_write_flags(cur_pref_con, cur_pref_con->flags & ~CON_CONSDEV);
    3582           0 :         hlist_add_head_rcu(&con->node, &console_list);
    3583             : }
    3584             : EXPORT_SYMBOL(console_force_preferred_locked);
    3585             : 
    3586             : /*
    3587             :  * Initialize the console device. This is called *early*, so
    3588             :  * we can't necessarily depend on lots of kernel help here.
    3589             :  * Just do some early initializations, and do the complex setup
    3590             :  * later.
    3591             :  */
    3592           1 : void __init console_init(void)
    3593             : {
    3594             :         int ret;
    3595             :         initcall_t call;
    3596             :         initcall_entry_t *ce;
    3597             : 
    3598             :         /* Setup the default TTY line discipline. */
    3599           1 :         n_tty_init();
    3600             : 
    3601             :         /*
    3602             :          * set up the console device so that later boot sequences can
    3603             :          * inform about problems etc..
    3604             :          */
    3605           1 :         ce = __con_initcall_start;
    3606           1 :         trace_initcall_level("console");
    3607           2 :         while (ce < __con_initcall_end) {
    3608           1 :                 call = initcall_from_entry(ce);
    3609             :                 trace_initcall_start(call);
    3610           1 :                 ret = call();
    3611           1 :                 trace_initcall_finish(call, ret);
    3612           1 :                 ce++;
    3613             :         }
    3614           1 : }
    3615             : 
    3616             : /*
    3617             :  * Some boot consoles access data that is in the init section and which will
    3618             :  * be discarded after the initcalls have been run. To make sure that no code
    3619             :  * will access this data, unregister the boot consoles in a late initcall.
    3620             :  *
    3621             :  * If for some reason, such as deferred probe or the driver being a loadable
    3622             :  * module, the real console hasn't registered yet at this point, there will
    3623             :  * be a brief interval in which no messages are logged to the console, which
    3624             :  * makes it difficult to diagnose problems that occur during this time.
    3625             :  *
    3626             :  * To mitigate this problem somewhat, only unregister consoles whose memory
    3627             :  * intersects with the init section. Note that all other boot consoles will
    3628             :  * get unregistered when the real preferred console is registered.
    3629             :  */
    3630           1 : static int __init printk_late_init(void)
    3631             : {
    3632             :         struct hlist_node *tmp;
    3633             :         struct console *con;
    3634             :         int ret;
    3635             : 
    3636             :         console_list_lock();
    3637           3 :         hlist_for_each_entry_safe(con, tmp, &console_list, node) {
    3638           2 :                 if (!(con->flags & CON_BOOT))
    3639           2 :                         continue;
    3640             : 
    3641             :                 /* Check addresses that might be used for enabled consoles. */
    3642           0 :                 if (init_section_intersects(con, sizeof(*con)) ||
    3643           0 :                     init_section_contains(con->write, 0) ||
    3644           0 :                     init_section_contains(con->read, 0) ||
    3645           0 :                     init_section_contains(con->device, 0) ||
    3646           0 :                     init_section_contains(con->unblank, 0) ||
    3647           0 :                     init_section_contains(con->data, 0)) {
    3648             :                         /*
    3649             :                          * Please, consider moving the reported consoles out
    3650             :                          * of the init section.
    3651             :                          */
    3652           0 :                         pr_warn("bootconsole [%s%d] uses init memory and must be disabled even before the real one is ready\n",
    3653             :                                 con->name, con->index);
    3654           0 :                         unregister_console_locked(con);
    3655             :                 }
    3656             :         }
    3657           1 :         console_list_unlock();
    3658             : 
    3659           1 :         ret = cpuhp_setup_state_nocalls(CPUHP_PRINTK_DEAD, "printk:dead", NULL,
    3660             :                                         console_cpu_notify);
    3661           1 :         WARN_ON(ret < 0);
    3662           1 :         ret = cpuhp_setup_state_nocalls(CPUHP_AP_ONLINE_DYN, "printk:online",
    3663             :                                         console_cpu_notify, NULL);
    3664           1 :         WARN_ON(ret < 0);
    3665           1 :         printk_sysctl_init();
    3666           1 :         return 0;
    3667             : }
    3668             : late_initcall(printk_late_init);
    3669             : 
    3670             : #if defined CONFIG_PRINTK
    3671             : /* If @con is specified, only wait for that console. Otherwise wait for all. */
    3672           0 : static bool __pr_flush(struct console *con, int timeout_ms, bool reset_on_progress)
    3673             : {
    3674           0 :         int remaining = timeout_ms;
    3675             :         struct console *c;
    3676           0 :         u64 last_diff = 0;
    3677             :         u64 printk_seq;
    3678             :         int cookie;
    3679             :         u64 diff;
    3680             :         u64 seq;
    3681             : 
    3682             :         might_sleep();
    3683             : 
    3684           0 :         seq = prb_next_seq(prb);
    3685             : 
    3686             :         for (;;) {
    3687           0 :                 diff = 0;
    3688             : 
    3689             :                 /*
    3690             :                  * Hold the console_lock to guarantee safe access to
    3691             :                  * console->seq and to prevent changes to @console_suspended
    3692             :                  * until all consoles have been processed.
    3693             :                  */
    3694             :                 console_lock();
    3695             : 
    3696           0 :                 cookie = console_srcu_read_lock();
    3697           0 :                 for_each_console_srcu(c) {
    3698           0 :                         if (con && con != c)
    3699           0 :                                 continue;
    3700           0 :                         if (!console_is_usable(c))
    3701           0 :                                 continue;
    3702           0 :                         printk_seq = c->seq;
    3703           0 :                         if (printk_seq < seq)
    3704           0 :                                 diff += seq - printk_seq;
    3705             :                 }
    3706           0 :                 console_srcu_read_unlock(cookie);
    3707             : 
    3708             :                 /*
    3709             :                  * If consoles are suspended, it cannot be expected that they
    3710             :                  * make forward progress, so timeout immediately. @diff is
    3711             :                  * still used to return a valid flush status.
    3712             :                  */
    3713           0 :                 if (console_suspended)
    3714             :                         remaining = 0;
    3715           0 :                 else if (diff != last_diff && reset_on_progress)
    3716           0 :                         remaining = timeout_ms;
    3717             : 
    3718           0 :                 console_unlock();
    3719             : 
    3720           0 :                 if (diff == 0 || remaining == 0)
    3721             :                         break;
    3722             : 
    3723           0 :                 if (remaining < 0) {
    3724             :                         /* no timeout limit */
    3725           0 :                         msleep(100);
    3726           0 :                 } else if (remaining < 100) {
    3727           0 :                         msleep(remaining);
    3728           0 :                         remaining = 0;
    3729             :                 } else {
    3730           0 :                         msleep(100);
    3731           0 :                         remaining -= 100;
    3732             :                 }
    3733             : 
    3734             :                 last_diff = diff;
    3735             :         }
    3736             : 
    3737           0 :         return (diff == 0);
    3738             : }
    3739             : 
    3740             : /**
    3741             :  * pr_flush() - Wait for printing threads to catch up.
    3742             :  *
    3743             :  * @timeout_ms:        The maximum time (in ms) to wait.
    3744             :  * @reset_on_progress: Reset the timeout if forward progress is seen.
    3745             :  *
    3746             :  * A value of 0 for @timeout_ms means no waiting will occur. A value of -1
    3747             :  * represents infinite waiting.
    3748             :  *
    3749             :  * If @reset_on_progress is true, the timeout will be reset whenever any
    3750             :  * printer has been seen to make some forward progress.
    3751             :  *
    3752             :  * Context: Process context. May sleep while acquiring console lock.
    3753             :  * Return: true if all enabled printers are caught up.
    3754             :  */
    3755             : static bool pr_flush(int timeout_ms, bool reset_on_progress)
    3756             : {
    3757           0 :         return __pr_flush(NULL, timeout_ms, reset_on_progress);
    3758             : }
    3759             : 
    3760             : /*
    3761             :  * Delayed printk version, for scheduler-internal messages:
    3762             :  */
    3763             : #define PRINTK_PENDING_WAKEUP   0x01
    3764             : #define PRINTK_PENDING_OUTPUT   0x02
    3765             : 
    3766             : static DEFINE_PER_CPU(int, printk_pending);
    3767             : 
    3768           0 : static void wake_up_klogd_work_func(struct irq_work *irq_work)
    3769             : {
    3770           0 :         int pending = this_cpu_xchg(printk_pending, 0);
    3771             : 
    3772           0 :         if (pending & PRINTK_PENDING_OUTPUT) {
    3773             :                 /* If trylock fails, someone else is doing the printing */
    3774           0 :                 if (console_trylock())
    3775           0 :                         console_unlock();
    3776             :         }
    3777             : 
    3778           0 :         if (pending & PRINTK_PENDING_WAKEUP)
    3779           0 :                 wake_up_interruptible(&log_wait);
    3780           0 : }
    3781             : 
    3782             : static DEFINE_PER_CPU(struct irq_work, wake_up_klogd_work) =
    3783             :         IRQ_WORK_INIT_LAZY(wake_up_klogd_work_func);
    3784             : 
    3785         811 : static void __wake_up_klogd(int val)
    3786             : {
    3787         811 :         if (!printk_percpu_data_ready())
    3788             :                 return;
    3789             : 
    3790         793 :         preempt_disable();
    3791             :         /*
    3792             :          * Guarantee any new records can be seen by tasks preparing to wait
    3793             :          * before this context checks if the wait queue is empty.
    3794             :          *
    3795             :          * The full memory barrier within wq_has_sleeper() pairs with the full
    3796             :          * memory barrier within set_current_state() of
    3797             :          * prepare_to_wait_event(), which is called after ___wait_event() adds
    3798             :          * the waiter but before it has checked the wait condition.
    3799             :          *
    3800             :          * This pairs with devkmsg_read:A and syslog_print:A.
    3801             :          */
    3802        1586 :         if (wq_has_sleeper(&log_wait) || /* LMM(__wake_up_klogd:A) */
    3803         793 :             (val & PRINTK_PENDING_OUTPUT)) {
    3804           0 :                 this_cpu_or(printk_pending, val);
    3805           0 :                 irq_work_queue(this_cpu_ptr(&wake_up_klogd_work));
    3806             :         }
    3807         793 :         preempt_enable();
    3808             : }
    3809             : 
    3810           0 : void wake_up_klogd(void)
    3811             : {
    3812         811 :         __wake_up_klogd(PRINTK_PENDING_WAKEUP);
    3813           0 : }
    3814             : 
    3815           0 : void defer_console_output(void)
    3816             : {
    3817             :         /*
    3818             :          * New messages may have been added directly to the ringbuffer
    3819             :          * using vprintk_store(), so wake any waiters as well.
    3820             :          */
    3821           0 :         __wake_up_klogd(PRINTK_PENDING_WAKEUP | PRINTK_PENDING_OUTPUT);
    3822           0 : }
    3823             : 
    3824           0 : void printk_trigger_flush(void)
    3825             : {
    3826             :         defer_console_output();
    3827           0 : }
    3828             : 
    3829           0 : int vprintk_deferred(const char *fmt, va_list args)
    3830             : {
    3831             :         int r;
    3832             : 
    3833           0 :         r = vprintk_emit(0, LOGLEVEL_SCHED, NULL, fmt, args);
    3834             :         defer_console_output();
    3835             : 
    3836           0 :         return r;
    3837             : }
    3838             : 
    3839           0 : int _printk_deferred(const char *fmt, ...)
    3840             : {
    3841             :         va_list args;
    3842             :         int r;
    3843             : 
    3844           0 :         va_start(args, fmt);
    3845           0 :         r = vprintk_deferred(fmt, args);
    3846           0 :         va_end(args);
    3847             : 
    3848           0 :         return r;
    3849             : }
    3850             : 
    3851             : /*
    3852             :  * printk rate limiting, lifted from the networking subsystem.
    3853             :  *
    3854             :  * This enforces a rate limit: not more than 10 kernel messages
    3855             :  * every 5s to make a denial-of-service attack impossible.
    3856             :  */
    3857             : DEFINE_RATELIMIT_STATE(printk_ratelimit_state, 5 * HZ, 10);
    3858             : 
    3859           0 : int __printk_ratelimit(const char *func)
    3860             : {
    3861           0 :         return ___ratelimit(&printk_ratelimit_state, func);
    3862             : }
    3863             : EXPORT_SYMBOL(__printk_ratelimit);
    3864             : 
    3865             : /**
    3866             :  * printk_timed_ratelimit - caller-controlled printk ratelimiting
    3867             :  * @caller_jiffies: pointer to caller's state
    3868             :  * @interval_msecs: minimum interval between prints
    3869             :  *
    3870             :  * printk_timed_ratelimit() returns true if more than @interval_msecs
    3871             :  * milliseconds have elapsed since the last time printk_timed_ratelimit()
    3872             :  * returned true.
    3873             :  */
    3874           0 : bool printk_timed_ratelimit(unsigned long *caller_jiffies,
    3875             :                         unsigned int interval_msecs)
    3876             : {
    3877           0 :         unsigned long elapsed = jiffies - *caller_jiffies;
    3878             : 
    3879           0 :         if (*caller_jiffies && elapsed <= msecs_to_jiffies(interval_msecs))
    3880             :                 return false;
    3881             : 
    3882           0 :         *caller_jiffies = jiffies;
    3883           0 :         return true;
    3884             : }
    3885             : EXPORT_SYMBOL(printk_timed_ratelimit);
    3886             : 
    3887             : static DEFINE_SPINLOCK(dump_list_lock);
    3888             : static LIST_HEAD(dump_list);
    3889             : 
    3890             : /**
    3891             :  * kmsg_dump_register - register a kernel log dumper.
    3892             :  * @dumper: pointer to the kmsg_dumper structure
    3893             :  *
    3894             :  * Adds a kernel log dumper to the system. The dump callback in the
    3895             :  * structure will be called when the kernel oopses or panics and must be
    3896             :  * set. Returns zero on success and %-EINVAL or %-EBUSY otherwise.
    3897             :  */
    3898           1 : int kmsg_dump_register(struct kmsg_dumper *dumper)
    3899             : {
    3900             :         unsigned long flags;
    3901           1 :         int err = -EBUSY;
    3902             : 
    3903             :         /* The dump callback needs to be set */
    3904           1 :         if (!dumper->dump)
    3905             :                 return -EINVAL;
    3906             : 
    3907           1 :         spin_lock_irqsave(&dump_list_lock, flags);
    3908             :         /* Don't allow registering multiple times */
    3909           1 :         if (!dumper->registered) {
    3910           1 :                 dumper->registered = 1;
    3911           2 :                 list_add_tail_rcu(&dumper->list, &dump_list);
    3912           1 :                 err = 0;
    3913             :         }
    3914           1 :         spin_unlock_irqrestore(&dump_list_lock, flags);
    3915             : 
    3916           1 :         return err;
    3917             : }
    3918             : EXPORT_SYMBOL_GPL(kmsg_dump_register);
    3919             : 
    3920             : /**
    3921             :  * kmsg_dump_unregister - unregister a kmsg dumper.
    3922             :  * @dumper: pointer to the kmsg_dumper structure
    3923             :  *
    3924             :  * Removes a dump device from the system. Returns zero on success and
    3925             :  * %-EINVAL otherwise.
    3926             :  */
    3927           0 : int kmsg_dump_unregister(struct kmsg_dumper *dumper)
    3928             : {
    3929             :         unsigned long flags;
    3930           0 :         int err = -EINVAL;
    3931             : 
    3932           0 :         spin_lock_irqsave(&dump_list_lock, flags);
    3933           0 :         if (dumper->registered) {
    3934           0 :                 dumper->registered = 0;
    3935           0 :                 list_del_rcu(&dumper->list);
    3936           0 :                 err = 0;
    3937             :         }
    3938           0 :         spin_unlock_irqrestore(&dump_list_lock, flags);
    3939           0 :         synchronize_rcu();
    3940             : 
    3941           0 :         return err;
    3942             : }
    3943             : EXPORT_SYMBOL_GPL(kmsg_dump_unregister);
    3944             : 
    3945             : static bool always_kmsg_dump;
    3946             : module_param_named(always_kmsg_dump, always_kmsg_dump, bool, S_IRUGO | S_IWUSR);
    3947             : 
    3948           0 : const char *kmsg_dump_reason_str(enum kmsg_dump_reason reason)
    3949             : {
    3950             :         switch (reason) {
    3951             :         case KMSG_DUMP_PANIC:
    3952             :                 return "Panic";
    3953             :         case KMSG_DUMP_OOPS:
    3954             :                 return "Oops";
    3955             :         case KMSG_DUMP_EMERG:
    3956             :                 return "Emergency";
    3957             :         case KMSG_DUMP_SHUTDOWN:
    3958             :                 return "Shutdown";
    3959             :         default:
    3960             :                 return "Unknown";
    3961             :         }
    3962             : }
    3963             : EXPORT_SYMBOL_GPL(kmsg_dump_reason_str);
    3964             : 
    3965             : /**
    3966             :  * kmsg_dump - dump kernel log to kernel message dumpers.
    3967             :  * @reason: the reason (oops, panic etc) for dumping
    3968             :  *
    3969             :  * Call each of the registered dumper's dump() callback, which can
    3970             :  * retrieve the kmsg records with kmsg_dump_get_line() or
    3971             :  * kmsg_dump_get_buffer().
    3972             :  */
    3973           1 : void kmsg_dump(enum kmsg_dump_reason reason)
    3974             : {
    3975             :         struct kmsg_dumper *dumper;
    3976             : 
    3977             :         rcu_read_lock();
    3978           2 :         list_for_each_entry_rcu(dumper, &dump_list, list) {
    3979           1 :                 enum kmsg_dump_reason max_reason = dumper->max_reason;
    3980             : 
    3981             :                 /*
    3982             :                  * If client has not provided a specific max_reason, default
    3983             :                  * to KMSG_DUMP_OOPS, unless always_kmsg_dump was set.
    3984             :                  */
    3985           1 :                 if (max_reason == KMSG_DUMP_UNDEF) {
    3986           1 :                         max_reason = always_kmsg_dump ? KMSG_DUMP_MAX :
    3987             :                                                         KMSG_DUMP_OOPS;
    3988             :                 }
    3989           1 :                 if (reason > max_reason)
    3990           1 :                         continue;
    3991             : 
    3992             :                 /* invoke dumper which will iterate over records */
    3993           0 :                 dumper->dump(dumper, reason);
    3994             :         }
    3995             :         rcu_read_unlock();
    3996           1 : }
    3997             : 
    3998             : /**
    3999             :  * kmsg_dump_get_line - retrieve one kmsg log line
    4000             :  * @iter: kmsg dump iterator
    4001             :  * @syslog: include the "<4>" prefixes
    4002             :  * @line: buffer to copy the line to
    4003             :  * @size: maximum size of the buffer
    4004             :  * @len: length of line placed into buffer
    4005             :  *
    4006             :  * Start at the beginning of the kmsg buffer, with the oldest kmsg
    4007             :  * record, and copy one record into the provided buffer.
    4008             :  *
    4009             :  * Consecutive calls will return the next available record moving
    4010             :  * towards the end of the buffer with the youngest messages.
    4011             :  *
    4012             :  * A return value of FALSE indicates that there are no more records to
    4013             :  * read.
    4014             :  */
    4015           0 : bool kmsg_dump_get_line(struct kmsg_dump_iter *iter, bool syslog,
    4016             :                         char *line, size_t size, size_t *len)
    4017             : {
    4018           0 :         u64 min_seq = latched_seq_read_nolock(&clear_seq);
    4019             :         struct printk_info info;
    4020             :         unsigned int line_count;
    4021             :         struct printk_record r;
    4022           0 :         size_t l = 0;
    4023           0 :         bool ret = false;
    4024             : 
    4025           0 :         if (iter->cur_seq < min_seq)
    4026           0 :                 iter->cur_seq = min_seq;
    4027             : 
    4028           0 :         prb_rec_init_rd(&r, &info, line, size);
    4029             : 
    4030             :         /* Read text or count text lines? */
    4031           0 :         if (line) {
    4032           0 :                 if (!prb_read_valid(prb, iter->cur_seq, &r))
    4033             :                         goto out;
    4034           0 :                 l = record_print_text(&r, syslog, printk_time);
    4035             :         } else {
    4036           0 :                 if (!prb_read_valid_info(prb, iter->cur_seq,
    4037             :                                          &info, &line_count)) {
    4038             :                         goto out;
    4039             :                 }
    4040           0 :                 l = get_record_print_text_size(&info, line_count, syslog,
    4041             :                                                printk_time);
    4042             : 
    4043             :         }
    4044             : 
    4045           0 :         iter->cur_seq = r.info->seq + 1;
    4046           0 :         ret = true;
    4047             : out:
    4048           0 :         if (len)
    4049           0 :                 *len = l;
    4050           0 :         return ret;
    4051             : }
    4052             : EXPORT_SYMBOL_GPL(kmsg_dump_get_line);
    4053             : 
    4054             : /**
    4055             :  * kmsg_dump_get_buffer - copy kmsg log lines
    4056             :  * @iter: kmsg dump iterator
    4057             :  * @syslog: include the "<4>" prefixes
    4058             :  * @buf: buffer to copy the line to
    4059             :  * @size: maximum size of the buffer
    4060             :  * @len_out: length of line placed into buffer
    4061             :  *
    4062             :  * Start at the end of the kmsg buffer and fill the provided buffer
    4063             :  * with as many of the *youngest* kmsg records that fit into it.
    4064             :  * If the buffer is large enough, all available kmsg records will be
    4065             :  * copied with a single call.
    4066             :  *
    4067             :  * Consecutive calls will fill the buffer with the next block of
    4068             :  * available older records, not including the earlier retrieved ones.
    4069             :  *
    4070             :  * A return value of FALSE indicates that there are no more records to
    4071             :  * read.
    4072             :  */
    4073           0 : bool kmsg_dump_get_buffer(struct kmsg_dump_iter *iter, bool syslog,
    4074             :                           char *buf, size_t size, size_t *len_out)
    4075             : {
    4076           0 :         u64 min_seq = latched_seq_read_nolock(&clear_seq);
    4077             :         struct printk_info info;
    4078             :         struct printk_record r;
    4079             :         u64 seq;
    4080             :         u64 next_seq;
    4081           0 :         size_t len = 0;
    4082           0 :         bool ret = false;
    4083           0 :         bool time = printk_time;
    4084             : 
    4085           0 :         if (!buf || !size)
    4086             :                 goto out;
    4087             : 
    4088           0 :         if (iter->cur_seq < min_seq)
    4089           0 :                 iter->cur_seq = min_seq;
    4090             : 
    4091           0 :         if (prb_read_valid_info(prb, iter->cur_seq, &info, NULL)) {
    4092           0 :                 if (info.seq != iter->cur_seq) {
    4093             :                         /* messages are gone, move to first available one */
    4094           0 :                         iter->cur_seq = info.seq;
    4095             :                 }
    4096             :         }
    4097             : 
    4098             :         /* last entry */
    4099           0 :         if (iter->cur_seq >= iter->next_seq)
    4100             :                 goto out;
    4101             : 
    4102             :         /*
    4103             :          * Find first record that fits, including all following records,
    4104             :          * into the user-provided buffer for this dump. Pass in size-1
    4105             :          * because this function (by way of record_print_text()) will
    4106             :          * not write more than size-1 bytes of text into @buf.
    4107             :          */
    4108           0 :         seq = find_first_fitting_seq(iter->cur_seq, iter->next_seq,
    4109             :                                      size - 1, syslog, time);
    4110             : 
    4111             :         /*
    4112             :          * Next kmsg_dump_get_buffer() invocation will dump block of
    4113             :          * older records stored right before this one.
    4114             :          */
    4115           0 :         next_seq = seq;
    4116             : 
    4117           0 :         prb_rec_init_rd(&r, &info, buf, size);
    4118             : 
    4119           0 :         len = 0;
    4120           0 :         prb_for_each_record(seq, prb, seq, &r) {
    4121           0 :                 if (r.info->seq >= iter->next_seq)
    4122             :                         break;
    4123             : 
    4124           0 :                 len += record_print_text(&r, syslog, time);
    4125             : 
    4126             :                 /* Adjust record to store to remaining buffer space. */
    4127           0 :                 prb_rec_init_rd(&r, &info, buf + len, size - len);
    4128             :         }
    4129             : 
    4130           0 :         iter->next_seq = next_seq;
    4131           0 :         ret = true;
    4132             : out:
    4133           0 :         if (len_out)
    4134           0 :                 *len_out = len;
    4135           0 :         return ret;
    4136             : }
    4137             : EXPORT_SYMBOL_GPL(kmsg_dump_get_buffer);
    4138             : 
    4139             : /**
    4140             :  * kmsg_dump_rewind - reset the iterator
    4141             :  * @iter: kmsg dump iterator
    4142             :  *
    4143             :  * Reset the dumper's iterator so that kmsg_dump_get_line() and
    4144             :  * kmsg_dump_get_buffer() can be called again and used multiple
    4145             :  * times within the same dumper.dump() callback.
    4146             :  */
    4147           0 : void kmsg_dump_rewind(struct kmsg_dump_iter *iter)
    4148             : {
    4149           0 :         iter->cur_seq = latched_seq_read_nolock(&clear_seq);
    4150           0 :         iter->next_seq = prb_next_seq(prb);
    4151           0 : }
    4152             : EXPORT_SYMBOL_GPL(kmsg_dump_rewind);
    4153             : 
    4154             : #endif
    4155             : 
    4156             : #ifdef CONFIG_SMP
    4157             : static atomic_t printk_cpu_sync_owner = ATOMIC_INIT(-1);
    4158             : static atomic_t printk_cpu_sync_nested = ATOMIC_INIT(0);
    4159             : 
    4160             : /**
    4161             :  * __printk_cpu_sync_wait() - Busy wait until the printk cpu-reentrant
    4162             :  *                            spinning lock is not owned by any CPU.
    4163             :  *
    4164             :  * Context: Any context.
    4165             :  */
    4166             : void __printk_cpu_sync_wait(void)
    4167             : {
    4168             :         do {
    4169             :                 cpu_relax();
    4170             :         } while (atomic_read(&printk_cpu_sync_owner) != -1);
    4171             : }
    4172             : EXPORT_SYMBOL(__printk_cpu_sync_wait);
    4173             : 
    4174             : /**
    4175             :  * __printk_cpu_sync_try_get() - Try to acquire the printk cpu-reentrant
    4176             :  *                               spinning lock.
    4177             :  *
    4178             :  * If no processor has the lock, the calling processor takes the lock and
    4179             :  * becomes the owner. If the calling processor is already the owner of the
    4180             :  * lock, this function succeeds immediately.
    4181             :  *
    4182             :  * Context: Any context. Expects interrupts to be disabled.
    4183             :  * Return: 1 on success, otherwise 0.
    4184             :  */
    4185             : int __printk_cpu_sync_try_get(void)
    4186             : {
    4187             :         int cpu;
    4188             :         int old;
    4189             : 
    4190             :         cpu = smp_processor_id();
    4191             : 
    4192             :         /*
    4193             :          * Guarantee loads and stores from this CPU when it is the lock owner
    4194             :          * are _not_ visible to the previous lock owner. This pairs with
    4195             :          * __printk_cpu_sync_put:B.
    4196             :          *
    4197             :          * Memory barrier involvement:
    4198             :          *
    4199             :          * If __printk_cpu_sync_try_get:A reads from __printk_cpu_sync_put:B,
    4200             :          * then __printk_cpu_sync_put:A can never read from
    4201             :          * __printk_cpu_sync_try_get:B.
    4202             :          *
    4203             :          * Relies on:
    4204             :          *
    4205             :          * RELEASE from __printk_cpu_sync_put:A to __printk_cpu_sync_put:B
    4206             :          * of the previous CPU
    4207             :          *    matching
    4208             :          * ACQUIRE from __printk_cpu_sync_try_get:A to
    4209             :          * __printk_cpu_sync_try_get:B of this CPU
    4210             :          */
    4211             :         old = atomic_cmpxchg_acquire(&printk_cpu_sync_owner, -1,
    4212             :                                      cpu); /* LMM(__printk_cpu_sync_try_get:A) */
    4213             :         if (old == -1) {
    4214             :                 /*
    4215             :                  * This CPU is now the owner and begins loading/storing
    4216             :                  * data: LMM(__printk_cpu_sync_try_get:B)
    4217             :                  */
    4218             :                 return 1;
    4219             : 
    4220             :         } else if (old == cpu) {
    4221             :                 /* This CPU is already the owner. */
    4222             :                 atomic_inc(&printk_cpu_sync_nested);
    4223             :                 return 1;
    4224             :         }
    4225             : 
    4226             :         return 0;
    4227             : }
    4228             : EXPORT_SYMBOL(__printk_cpu_sync_try_get);
    4229             : 
    4230             : /**
    4231             :  * __printk_cpu_sync_put() - Release the printk cpu-reentrant spinning lock.
    4232             :  *
    4233             :  * The calling processor must be the owner of the lock.
    4234             :  *
    4235             :  * Context: Any context. Expects interrupts to be disabled.
    4236             :  */
    4237             : void __printk_cpu_sync_put(void)
    4238             : {
    4239             :         if (atomic_read(&printk_cpu_sync_nested)) {
    4240             :                 atomic_dec(&printk_cpu_sync_nested);
    4241             :                 return;
    4242             :         }
    4243             : 
    4244             :         /*
    4245             :          * This CPU is finished loading/storing data:
    4246             :          * LMM(__printk_cpu_sync_put:A)
    4247             :          */
    4248             : 
    4249             :         /*
    4250             :          * Guarantee loads and stores from this CPU when it was the
    4251             :          * lock owner are visible to the next lock owner. This pairs
    4252             :          * with __printk_cpu_sync_try_get:A.
    4253             :          *
    4254             :          * Memory barrier involvement:
    4255             :          *
    4256             :          * If __printk_cpu_sync_try_get:A reads from __printk_cpu_sync_put:B,
    4257             :          * then __printk_cpu_sync_try_get:B reads from __printk_cpu_sync_put:A.
    4258             :          *
    4259             :          * Relies on:
    4260             :          *
    4261             :          * RELEASE from __printk_cpu_sync_put:A to __printk_cpu_sync_put:B
    4262             :          * of this CPU
    4263             :          *    matching
    4264             :          * ACQUIRE from __printk_cpu_sync_try_get:A to
    4265             :          * __printk_cpu_sync_try_get:B of the next CPU
    4266             :          */
    4267             :         atomic_set_release(&printk_cpu_sync_owner,
    4268             :                            -1); /* LMM(__printk_cpu_sync_put:B) */
    4269             : }
    4270             : EXPORT_SYMBOL(__printk_cpu_sync_put);
    4271             : #endif /* CONFIG_SMP */

Generated by: LCOV version 1.14