diff options
Diffstat (limited to 'kernel/printk.c')
| -rw-r--r-- | kernel/printk.c | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/kernel/printk.c b/kernel/printk.c index 5052b5497c67..b4d97b54c1ec 100644 --- a/kernel/printk.c +++ b/kernel/printk.c | |||
| @@ -687,20 +687,35 @@ asmlinkage int vprintk(const char *fmt, va_list args) | |||
| 687 | sizeof(printk_buf) - printed_len, fmt, args); | 687 | sizeof(printk_buf) - printed_len, fmt, args); |
| 688 | 688 | ||
| 689 | 689 | ||
| 690 | p = printk_buf; | ||
| 691 | |||
| 692 | /* Do we have a loglevel in the string? */ | ||
| 693 | if (p[0] == '<') { | ||
| 694 | unsigned char c = p[1]; | ||
| 695 | if (c && p[2] == '>') { | ||
| 696 | switch (c) { | ||
| 697 | case '0' ... '7': /* loglevel */ | ||
| 698 | current_log_level = c - '0'; | ||
| 699 | /* Fallthrough - make sure we're on a new line */ | ||
| 700 | case 'd': /* KERN_DEFAULT */ | ||
| 701 | if (!new_text_line) { | ||
| 702 | emit_log_char('\n'); | ||
| 703 | new_text_line = 1; | ||
| 704 | } | ||
| 705 | /* Fallthrough - skip the loglevel */ | ||
| 706 | case 'c': /* KERN_CONT */ | ||
| 707 | p += 3; | ||
| 708 | break; | ||
| 709 | } | ||
| 710 | } | ||
| 711 | } | ||
| 712 | |||
| 690 | /* | 713 | /* |
| 691 | * Copy the output into log_buf. If the caller didn't provide | 714 | * Copy the output into log_buf. If the caller didn't provide |
| 692 | * appropriate log level tags, we insert them here | 715 | * appropriate log level tags, we insert them here |
| 693 | */ | 716 | */ |
| 694 | for (p = printk_buf; *p; p++) { | 717 | for ( ; *p; p++) { |
| 695 | if (new_text_line) { | 718 | if (new_text_line) { |
| 696 | /* If a token, set current_log_level and skip over */ | ||
| 697 | if (p[0] == '<' && p[1] >= '0' && p[1] <= '7' && | ||
| 698 | p[2] == '>') { | ||
| 699 | current_log_level = p[1] - '0'; | ||
| 700 | p += 3; | ||
| 701 | printed_len -= 3; | ||
| 702 | } | ||
| 703 | |||
| 704 | /* Always output the token */ | 719 | /* Always output the token */ |
| 705 | emit_log_char('<'); | 720 | emit_log_char('<'); |
| 706 | emit_log_char(current_log_level + '0'); | 721 | emit_log_char(current_log_level + '0'); |
