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
1515 #define _LINUX_CONSOLE_H_ 1
1616
1717 #include <linux/atomic.h>
18+#include <linux/bits.h>
1819 #include <linux/rculist.h>
1920 #include <linux/types.h>
2021
@@ -125,37 +126,82 @@ static inline int con_debug_leave(void) · 104 unmodified lines
125126 /*
126127 * The interface for a console, or any other device that wants to capture
127128 * 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.
131129 */
132130
133−#define CON_PRINTBUFFER (1)
134−#define CON_CONSDEV (2) /* Preferred console, /dev/console */
135−#define CON_ENABLED (4)
136−#define CON_BOOT (8)
137−#define CON_ANYTIME (16) /* Safe to call when cpu is offline */
138−#define CON_BRL (32) /* Used for a braille device */
139−#define CON_EXTENDED (64) /* Use the extended output format a la /dev/kmsg */
131+/**
132+ * cons_flags - General console flags
133+ * @CON_PRINTBUFFER: Used by newly registered consoles to avoid duplicate
134+ * output of messages that were already shown by boot
135+ * consoles or read by userspace via syslog() syscall.
136+ * @CON_CONSDEV: Indicates that the console driver is backing
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+ */
157+enum 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+};
140166
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+ */
141187 struct console {
142− char name[16];
143− void (*write)(struct console *, const char *, unsigned);
144− int (*read)(struct console *, char *, unsigned);
145− struct tty_driver *(*device)(struct console *, int *);
146− void (*unblank)(void);
147− int (*setup)(struct console *, char *);
148− int (*exit)(struct console *);
149− int (*match)(struct console *, char *name, int idx, char *options);
150− short flags;
151− short index;
152− int cflag;
153− uint ispeed;
154− uint ospeed;
155− u64 seq;
156− unsigned long dropped;
157− void *data;
158− struct hlist_node node;
188+ char name[16];
189+ void (*write)(struct console *co, const char *s, unsigned int count);
190+ int (*read)(struct console *co, char *s, unsigned int count);
191+ struct tty_driver *(*device)(struct console *co, int *index);
192+ void (*unblank)(void);
193+ int (*setup)(struct console *co, char *options);
194+ int (*exit)(struct console *co);
195+ int (*match)(struct console *co, char *name, int idx, char *options);
196+ short flags;
197+ short index;
198+ int cflag;
199+ uint ispeed;
200+ uint ospeed;
201+ u64 seq;
202+ unsigned long dropped;
203+ void *data;
204+ struct hlist_node node;
159205 };
160206
161207 #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
4444 return buffer;
4545 }
4646
47−#define CONSOLE_EXT_LOG_MAX 8192
48−
4947 /* printk's without a loglevel use this.. */
5048 #define MESSAGE_LOGLEVEL_DEFAULT CONFIG_MESSAGE_LOGLEVEL_DEFAULT
5149