aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/printk/printk.c80
1 files changed, 40 insertions, 40 deletions
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 8f1fb50aa3ce..5b5a7080e2a5 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -173,7 +173,7 @@ static int console_may_schedule;
173 * 67 "g" 173 * 67 "g"
174 * 0032 00 00 00 padding to next message header 174 * 0032 00 00 00 padding to next message header
175 * 175 *
176 * The 'struct log' buffer header must never be directly exported to 176 * The 'struct printk_log' buffer header must never be directly exported to
177 * userspace, it is a kernel-private implementation detail that might 177 * userspace, it is a kernel-private implementation detail that might
178 * need to be changed in the future, when the requirements change. 178 * need to be changed in the future, when the requirements change.
179 * 179 *
@@ -195,7 +195,7 @@ enum log_flags {
195 LOG_CONT = 8, /* text is a fragment of a continuation line */ 195 LOG_CONT = 8, /* text is a fragment of a continuation line */
196}; 196};
197 197
198struct log { 198struct printk_log {
199 u64 ts_nsec; /* timestamp in nanoseconds */ 199 u64 ts_nsec; /* timestamp in nanoseconds */
200 u16 len; /* length of entire record */ 200 u16 len; /* length of entire record */
201 u16 text_len; /* length of text buffer */ 201 u16 text_len; /* length of text buffer */
@@ -243,7 +243,7 @@ static u32 clear_idx;
243#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) 243#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
244#define LOG_ALIGN 4 244#define LOG_ALIGN 4
245#else 245#else
246#define LOG_ALIGN __alignof__(struct log) 246#define LOG_ALIGN __alignof__(struct printk_log)
247#endif 247#endif
248#define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT) 248#define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)
249static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN); 249static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN);
@@ -254,35 +254,35 @@ static u32 log_buf_len = __LOG_BUF_LEN;
254static volatile unsigned int logbuf_cpu = UINT_MAX; 254static volatile unsigned int logbuf_cpu = UINT_MAX;
255 255
256/* human readable text of the record */ 256/* human readable text of the record */
257static char *log_text(const struct log *msg) 257static char *log_text(const struct printk_log *msg)
258{ 258{
259 return (char *)msg + sizeof(struct log); 259 return (char *)msg + sizeof(struct printk_log);
260} 260}
261 261
262/* optional key/value pair dictionary attached to the record */ 262/* optional key/value pair dictionary attached to the record */
263static char *log_dict(const struct log *msg) 263static char *log_dict(const struct printk_log *msg)
264{ 264{
265 return (char *)msg + sizeof(struct log) + msg->text_len; 265 return (char *)msg + sizeof(struct printk_log) + msg->text_len;
266} 266}
267 267
268/* get record by index; idx must point to valid msg */ 268/* get record by index; idx must point to valid msg */
269static struct log *log_from_idx(u32 idx) 269static struct printk_log *log_from_idx(u32 idx)
270{ 270{
271 struct log *msg = (struct log *)(log_buf + idx); 271 struct printk_log *msg = (struct printk_log *)(log_buf + idx);
272 272
273 /* 273 /*
274 * A length == 0 record is the end of buffer marker. Wrap around and 274 * A length == 0 record is the end of buffer marker. Wrap around and
275 * read the message at the start of the buffer. 275 * read the message at the start of the buffer.
276 */ 276 */
277 if (!msg->len) 277 if (!msg->len)
278 return (struct log *)log_buf; 278 return (struct printk_log *)log_buf;
279 return msg; 279 return msg;
280} 280}
281 281
282/* get next record; idx must point to valid msg */ 282/* get next record; idx must point to valid msg */
283static u32 log_next(u32 idx) 283static u32 log_next(u32 idx)
284{ 284{
285 struct log *msg = (struct log *)(log_buf + idx); 285 struct printk_log *msg = (struct printk_log *)(log_buf + idx);
286 286
287 /* length == 0 indicates the end of the buffer; wrap */ 287 /* length == 0 indicates the end of the buffer; wrap */
288 /* 288 /*
@@ -291,7 +291,7 @@ static u32 log_next(u32 idx)
291 * return the one after that. 291 * return the one after that.
292 */ 292 */
293 if (!msg->len) { 293 if (!msg->len) {
294 msg = (struct log *)log_buf; 294 msg = (struct printk_log *)log_buf;
295 return msg->len; 295 return msg->len;
296 } 296 }
297 return idx + msg->len; 297 return idx + msg->len;
@@ -303,11 +303,11 @@ static void log_store(int facility, int level,
303 const char *dict, u16 dict_len, 303 const char *dict, u16 dict_len,
304 const char *text, u16 text_len) 304 const char *text, u16 text_len)
305{ 305{
306 struct log *msg; 306 struct printk_log *msg;
307 u32 size, pad_len; 307 u32 size, pad_len;
308 308
309 /* number of '\0' padding bytes to next message */ 309 /* number of '\0' padding bytes to next message */
310 size = sizeof(struct log) + text_len + dict_len; 310 size = sizeof(struct printk_log) + text_len + dict_len;
311 pad_len = (-size) & (LOG_ALIGN - 1); 311 pad_len = (-size) & (LOG_ALIGN - 1);
312 size += pad_len; 312 size += pad_len;
313 313
@@ -319,7 +319,7 @@ static void log_store(int facility, int level,
319 else 319 else
320 free = log_first_idx - log_next_idx; 320 free = log_first_idx - log_next_idx;
321 321
322 if (free > size + sizeof(struct log)) 322 if (free > size + sizeof(struct printk_log))
323 break; 323 break;
324 324
325 /* drop old messages until we have enough contiuous space */ 325 /* drop old messages until we have enough contiuous space */
@@ -327,18 +327,18 @@ static void log_store(int facility, int level,
327 log_first_seq++; 327 log_first_seq++;
328 } 328 }
329 329
330 if (log_next_idx + size + sizeof(struct log) >= log_buf_len) { 330 if (log_next_idx + size + sizeof(struct printk_log) >= log_buf_len) {
331 /* 331 /*
332 * This message + an additional empty header does not fit 332 * This message + an additional empty header does not fit
333 * at the end of the buffer. Add an empty header with len == 0 333 * at the end of the buffer. Add an empty header with len == 0
334 * to signify a wrap around. 334 * to signify a wrap around.
335 */ 335 */
336 memset(log_buf + log_next_idx, 0, sizeof(struct log)); 336 memset(log_buf + log_next_idx, 0, sizeof(struct printk_log));
337 log_next_idx = 0; 337 log_next_idx = 0;
338 } 338 }
339 339
340 /* fill message */ 340 /* fill message */
341 msg = (struct log *)(log_buf + log_next_idx); 341 msg = (struct printk_log *)(log_buf + log_next_idx);
342 memcpy(log_text(msg), text, text_len); 342 memcpy(log_text(msg), text, text_len);
343 msg->text_len = text_len; 343 msg->text_len = text_len;
344 memcpy(log_dict(msg), dict, dict_len); 344 memcpy(log_dict(msg), dict, dict_len);
@@ -351,7 +351,7 @@ static void log_store(int facility, int level,
351 else 351 else
352 msg->ts_nsec = local_clock(); 352 msg->ts_nsec = local_clock();
353 memset(log_dict(msg) + dict_len, 0, pad_len); 353 memset(log_dict(msg) + dict_len, 0, pad_len);
354 msg->len = sizeof(struct log) + text_len + dict_len + pad_len; 354 msg->len = sizeof(struct printk_log) + text_len + dict_len + pad_len;
355 355
356 /* insert message */ 356 /* insert message */
357 log_next_idx += msg->len; 357 log_next_idx += msg->len;
@@ -474,7 +474,7 @@ static ssize_t devkmsg_read(struct file *file, char __user *buf,
474 size_t count, loff_t *ppos) 474 size_t count, loff_t *ppos)
475{ 475{
476 struct devkmsg_user *user = file->private_data; 476 struct devkmsg_user *user = file->private_data;
477 struct log *msg; 477 struct printk_log *msg;
478 u64 ts_usec; 478 u64 ts_usec;
479 size_t i; 479 size_t i;
480 char cont = '-'; 480 char cont = '-';
@@ -719,14 +719,14 @@ void log_buf_kexec_setup(void)
719 VMCOREINFO_SYMBOL(log_first_idx); 719 VMCOREINFO_SYMBOL(log_first_idx);
720 VMCOREINFO_SYMBOL(log_next_idx); 720 VMCOREINFO_SYMBOL(log_next_idx);
721 /* 721 /*
722 * Export struct log size and field offsets. User space tools can 722 * Export struct printk_log size and field offsets. User space tools can
723 * parse it and detect any changes to structure down the line. 723 * parse it and detect any changes to structure down the line.
724 */ 724 */
725 VMCOREINFO_STRUCT_SIZE(log); 725 VMCOREINFO_STRUCT_SIZE(printk_log);
726 VMCOREINFO_OFFSET(log, ts_nsec); 726 VMCOREINFO_OFFSET(printk_log, ts_nsec);
727 VMCOREINFO_OFFSET(log, len); 727 VMCOREINFO_OFFSET(printk_log, len);
728 VMCOREINFO_OFFSET(log, text_len); 728 VMCOREINFO_OFFSET(printk_log, text_len);
729 VMCOREINFO_OFFSET(log, dict_len); 729 VMCOREINFO_OFFSET(printk_log, dict_len);
730} 730}
731#endif 731#endif
732 732
@@ -879,7 +879,7 @@ static size_t print_time(u64 ts, char *buf)
879 (unsigned long)ts, rem_nsec / 1000); 879 (unsigned long)ts, rem_nsec / 1000);
880} 880}
881 881
882static size_t print_prefix(const struct log *msg, bool syslog, char *buf) 882static size_t print_prefix(const struct printk_log *msg, bool syslog, char *buf)
883{ 883{
884 size_t len = 0; 884 size_t len = 0;
885 unsigned int prefix = (msg->facility << 3) | msg->level; 885 unsigned int prefix = (msg->facility << 3) | msg->level;
@@ -902,7 +902,7 @@ static size_t print_prefix(const struct log *msg, bool syslog, char *buf)
902 return len; 902 return len;
903} 903}
904 904
905static size_t msg_print_text(const struct log *msg, enum log_flags prev, 905static size_t msg_print_text(const struct printk_log *msg, enum log_flags prev,
906 bool syslog, char *buf, size_t size) 906 bool syslog, char *buf, size_t size)
907{ 907{
908 const char *text = log_text(msg); 908 const char *text = log_text(msg);
@@ -964,7 +964,7 @@ static size_t msg_print_text(const struct log *msg, enum log_flags prev,
964static int syslog_print(char __user *buf, int size) 964static int syslog_print(char __user *buf, int size)
965{ 965{
966 char *text; 966 char *text;
967 struct log *msg; 967 struct printk_log *msg;
968 int len = 0; 968 int len = 0;
969 969
970 text = kmalloc(LOG_LINE_MAX + PREFIX_MAX, GFP_KERNEL); 970 text = kmalloc(LOG_LINE_MAX + PREFIX_MAX, GFP_KERNEL);
@@ -1055,7 +1055,7 @@ static int syslog_print_all(char __user *buf, int size, bool clear)
1055 idx = clear_idx; 1055 idx = clear_idx;
1056 prev = 0; 1056 prev = 0;
1057 while (seq < log_next_seq) { 1057 while (seq < log_next_seq) {
1058 struct log *msg = log_from_idx(idx); 1058 struct printk_log *msg = log_from_idx(idx);
1059 1059
1060 len += msg_print_text(msg, prev, true, NULL, 0); 1060 len += msg_print_text(msg, prev, true, NULL, 0);
1061 prev = msg->flags; 1061 prev = msg->flags;
@@ -1068,7 +1068,7 @@ static int syslog_print_all(char __user *buf, int size, bool clear)
1068 idx = clear_idx; 1068 idx = clear_idx;
1069 prev = 0; 1069 prev = 0;
1070 while (len > size && seq < log_next_seq) { 1070 while (len > size && seq < log_next_seq) {
1071 struct log *msg = log_from_idx(idx); 1071 struct printk_log *msg = log_from_idx(idx);
1072 1072
1073 len -= msg_print_text(msg, prev, true, NULL, 0); 1073 len -= msg_print_text(msg, prev, true, NULL, 0);
1074 prev = msg->flags; 1074 prev = msg->flags;
@@ -1082,7 +1082,7 @@ static int syslog_print_all(char __user *buf, int size, bool clear)
1082 len = 0; 1082 len = 0;
1083 prev = 0; 1083 prev = 0;
1084 while (len >= 0 && seq < next_seq) { 1084 while (len >= 0 && seq < next_seq) {
1085 struct log *msg = log_from_idx(idx); 1085 struct printk_log *msg = log_from_idx(idx);
1086 int textlen; 1086 int textlen;
1087 1087
1088 textlen = msg_print_text(msg, prev, true, text, 1088 textlen = msg_print_text(msg, prev, true, text,
@@ -1228,7 +1228,7 @@ int do_syslog(int type, char __user *buf, int len, bool from_file)
1228 1228
1229 error = 0; 1229 error = 0;
1230 while (seq < log_next_seq) { 1230 while (seq < log_next_seq) {
1231 struct log *msg = log_from_idx(idx); 1231 struct printk_log *msg = log_from_idx(idx);
1232 1232
1233 error += msg_print_text(msg, prev, true, NULL, 0); 1233 error += msg_print_text(msg, prev, true, NULL, 0);
1234 idx = log_next(idx); 1234 idx = log_next(idx);
@@ -1714,10 +1714,10 @@ static struct cont {
1714 u8 level; 1714 u8 level;
1715 bool flushed:1; 1715 bool flushed:1;
1716} cont; 1716} cont;
1717static struct log *log_from_idx(u32 idx) { return NULL; } 1717static struct printk_log *log_from_idx(u32 idx) { return NULL; }
1718static u32 log_next(u32 idx) { return 0; } 1718static u32 log_next(u32 idx) { return 0; }
1719static void call_console_drivers(int level, const char *text, size_t len) {} 1719static void call_console_drivers(int level, const char *text, size_t len) {}
1720static size_t msg_print_text(const struct log *msg, enum log_flags prev, 1720static size_t msg_print_text(const struct printk_log *msg, enum log_flags prev,
1721 bool syslog, char *buf, size_t size) { return 0; } 1721 bool syslog, char *buf, size_t size) { return 0; }
1722static size_t cont_print_text(char *text, size_t size) { return 0; } 1722static size_t cont_print_text(char *text, size_t size) { return 0; }
1723 1723
@@ -2029,7 +2029,7 @@ void console_unlock(void)
2029 console_cont_flush(text, sizeof(text)); 2029 console_cont_flush(text, sizeof(text));
2030again: 2030again:
2031 for (;;) { 2031 for (;;) {
2032 struct log *msg; 2032 struct printk_log *msg;
2033 size_t len; 2033 size_t len;
2034 int level; 2034 int level;
2035 2035
@@ -2645,7 +2645,7 @@ void kmsg_dump(enum kmsg_dump_reason reason)
2645bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog, 2645bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog,
2646 char *line, size_t size, size_t *len) 2646 char *line, size_t size, size_t *len)
2647{ 2647{
2648 struct log *msg; 2648 struct printk_log *msg;
2649 size_t l = 0; 2649 size_t l = 0;
2650 bool ret = false; 2650 bool ret = false;
2651 2651
@@ -2757,7 +2757,7 @@ bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
2757 idx = dumper->cur_idx; 2757 idx = dumper->cur_idx;
2758 prev = 0; 2758 prev = 0;
2759 while (seq < dumper->next_seq) { 2759 while (seq < dumper->next_seq) {
2760 struct log *msg = log_from_idx(idx); 2760 struct printk_log *msg = log_from_idx(idx);
2761 2761
2762 l += msg_print_text(msg, prev, true, NULL, 0); 2762 l += msg_print_text(msg, prev, true, NULL, 0);
2763 idx = log_next(idx); 2763 idx = log_next(idx);
@@ -2770,7 +2770,7 @@ bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
2770 idx = dumper->cur_idx; 2770 idx = dumper->cur_idx;
2771 prev = 0; 2771 prev = 0;
2772 while (l > size && seq < dumper->next_seq) { 2772 while (l > size && seq < dumper->next_seq) {
2773 struct log *msg = log_from_idx(idx); 2773 struct printk_log *msg = log_from_idx(idx);
2774 2774
2775 l -= msg_print_text(msg, prev, true, NULL, 0); 2775 l -= msg_print_text(msg, prev, true, NULL, 0);
2776 idx = log_next(idx); 2776 idx = log_next(idx);
@@ -2785,7 +2785,7 @@ bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
2785 l = 0; 2785 l = 0;
2786 prev = 0; 2786 prev = 0;
2787 while (seq < dumper->next_seq) { 2787 while (seq < dumper->next_seq) {
2788 struct log *msg = log_from_idx(idx); 2788 struct printk_log *msg = log_from_idx(idx);
2789 2789
2790 l += msg_print_text(msg, prev, syslog, buf + l, size - l); 2790 l += msg_print_text(msg, prev, syslog, buf + l, size - l);
2791 idx = log_next(idx); 2791 idx = log_next(idx);