History

Merge tag 'printk-for-6.3' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux

Pull printk updates from Petr Mladek: - Refactor printk code for formatting messages that are shown on consoles. This is a preparatory step for introducing atomic consoles which could not share the global buffers - Prevent memory leak when removing printk index in debugfs - Dump also the newest printk message by the sample gdbmacro - Fix a compiler warning * tag 'printk-for-6.3' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux: printf: fix errname.c list kernel/printk/index.c: fix memory leak with using debugfs_lookup() printk: Use scnprintf() to print the message about the dropped messages on a console printk: adjust string limit macros printk: use printk_buffers for devkmsg printk: introduce console_prepend_dropped() for dropped messages printk: introduce printk_get_next_message() and printk_message printk: introduce struct printk_buffers console: Document struct console console: Use BIT() macros for @flags values printk: move size limit macros into internal.h docs: gdbmacros: print newest record

Linus Torvalds committed 3 years ago

Commit d8763152 parents cd43b50 392143c7 files · +313 −168Browse files

Showing the changes to include (2 of 7 files). Show all

Unified · Split

2 files
  1. include/linux/console.h +73 −27
  2. include/linux/printk.h +0 −2
include/linux/console.h+73−27
@@ -15,6 +15,7 @@ · 14 unmodified lines
15#define _LINUX_CONSOLE_H_ 115#define _LINUX_CONSOLE_H_ 1
16 16
17#include <linux/atomic.h>17#include <linux/atomic.h>
18#include <linux/bits.h>
18#include <linux/rculist.h>19#include <linux/rculist.h>
19#include <linux/types.h>20#include <linux/types.h>
20 21
@@ -125,37 +126,82 @@ static inline int con_debug_leave(void) · 104 unmodified lines
125/*126/*
126 * The interface for a console, or any other device that wants to capture127 * The interface for a console, or any other device that wants to capture
127 * console messages (printer driver?)128 * console messages (printer driver?)
128 *
129 * If a console driver is marked CON_BOOT then it will be auto-unregistered
130 * when the first real console is registered. This is for early-printk drivers.
131 */129 */
132 130
133#define CON_PRINTBUFFER (1)131/**
134#define CON_CONSDEV (2) /* Preferred console, /dev/console */132 * cons_flags - General console flags
135#define CON_ENABLED (4)133 * @CON_PRINTBUFFER: Used by newly registered consoles to avoid duplicate
136#define CON_BOOT (8)134 * output of messages that were already shown by boot
137#define CON_ANYTIME (16) /* Safe to call when cpu is offline */135 * consoles or read by userspace via syslog() syscall.
138#define CON_BRL (32) /* Used for a braille device */136 * @CON_CONSDEV: Indicates that the console driver is backing
139#define CON_EXTENDED (64) /* Use the extended output format a la /dev/kmsg */137 * /dev/console.
138 * @CON_ENABLED: Indicates if a console is allowed to print records. If
139 * false, the console also will not advance to later
140 * records.
141 * @CON_BOOT: Marks the console driver as early console driver which
142 * is used during boot before the real driver becomes
143 * available. It will be automatically unregistered
144 * when the real console driver is registered unless
145 * "keep_bootcon" parameter is used.
146 * @CON_ANYTIME: A misnomed historical flag which tells the core code
147 * that the legacy @console::write callback can be invoked
148 * on a CPU which is marked OFFLINE. That is misleading as
149 * it suggests that there is no contextual limit for
150 * invoking the callback. The original motivation was
151 * readiness of the per-CPU areas.
152 * @CON_BRL: Indicates a braille device which is exempt from
153 * receiving the printk spam for obvious reasons.
154 * @CON_EXTENDED: The console supports the extended output format of
155 * /dev/kmesg which requires a larger output buffer.
156 */
157enum cons_flags {
158 CON_PRINTBUFFER = BIT(0),
159 CON_CONSDEV = BIT(1),
160 CON_ENABLED = BIT(2),
161 CON_BOOT = BIT(3),
162 CON_ANYTIME = BIT(4),
163 CON_BRL = BIT(5),
164 CON_EXTENDED = BIT(6),
165};
140 166
167/**
168 * struct console - The console descriptor structure
169 * @name: The name of the console driver
170 * @write: Write callback to output messages (Optional)
171 * @read: Read callback for console input (Optional)
172 * @device: The underlying TTY device driver (Optional)
173 * @unblank: Callback to unblank the console (Optional)
174 * @setup: Callback for initializing the console (Optional)
175 * @exit: Callback for teardown of the console (Optional)
176 * @match: Callback for matching a console (Optional)
177 * @flags: Console flags. See enum cons_flags
178 * @index: Console index, e.g. port number
179 * @cflag: TTY control mode flags
180 * @ispeed: TTY input speed
181 * @ospeed: TTY output speed
182 * @seq: Sequence number of the next ringbuffer record to print
183 * @dropped: Number of unreported dropped ringbuffer records
184 * @data: Driver private data
185 * @node: hlist node for the console list
186 */
141struct console {187struct console {
142 char name[16];188 char name[16];
143 void (*write)(struct console *, const char *, unsigned);189 void (*write)(struct console *co, const char *s, unsigned int count);
144 int (*read)(struct console *, char *, unsigned);190 int (*read)(struct console *co, char *s, unsigned int count);
145 struct tty_driver *(*device)(struct console *, int *);191 struct tty_driver *(*device)(struct console *co, int *index);
146 void (*unblank)(void);192 void (*unblank)(void);
147 int (*setup)(struct console *, char *);193 int (*setup)(struct console *co, char *options);
148 int (*exit)(struct console *);194 int (*exit)(struct console *co);
149 int (*match)(struct console *, char *name, int idx, char *options);195 int (*match)(struct console *co, char *name, int idx, char *options);
150 short flags;196 short flags;
151 short index;197 short index;
152 int cflag;198 int cflag;
153 uint ispeed;199 uint ispeed;
154 uint ospeed;200 uint ospeed;
155 u64 seq;201 u64 seq;
156 unsigned long dropped;202 unsigned long dropped;
157 void *data;203 void *data;
158 struct hlist_node node;204 struct hlist_node node;
159};205};
160 206
161#ifdef CONFIG_LOCKDEP207#ifdef CONFIG_LOCKDEP
include/linux/printk.h+0−2
@@ -44,8 +44,6 @@ static inline const char *printk_skip_headers(const char *buffer) · 43 unmodified lines
44 return buffer;44 return buffer;
45}45}
46 46
47#define CONSOLE_EXT_LOG_MAX 8192
48
49/* printk's without a loglevel use this.. */47/* printk's without a loglevel use this.. */
50#define MESSAGE_LOGLEVEL_DEFAULT CONFIG_MESSAGE_LOGLEVEL_DEFAULT48#define MESSAGE_LOGLEVEL_DEFAULT CONFIG_MESSAGE_LOGLEVEL_DEFAULT
51 49