diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-10 21:34:42 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-10 21:34:42 -0500 |
commit | b6da0076bab5a12afb19312ffee41c95490af2a0 (patch) | |
tree | 52a5675b9c2ff95d88b981d5b9a3822f6073c112 /kernel/printk | |
parent | cbfe0de303a55ed96d8831c2d5f56f8131cd6612 (diff) | |
parent | a53b831549141aa060a8b54b76e3a42870d74cc0 (diff) |
Merge branch 'akpm' (patchbomb from Andrew)
Merge first patchbomb from Andrew Morton:
- a few minor cifs fixes
- dma-debug upadtes
- ocfs2
- slab
- about half of MM
- procfs
- kernel/exit.c
- panic.c tweaks
- printk upates
- lib/ updates
- checkpatch updates
- fs/binfmt updates
- the drivers/rtc tree
- nilfs
- kmod fixes
- more kernel/exit.c
- various other misc tweaks and fixes
* emailed patches from Andrew Morton <akpm@linux-foundation.org>: (190 commits)
exit: pidns: fix/update the comments in zap_pid_ns_processes()
exit: pidns: alloc_pid() leaks pid_namespace if child_reaper is exiting
exit: exit_notify: re-use "dead" list to autoreap current
exit: reparent: call forget_original_parent() under tasklist_lock
exit: reparent: avoid find_new_reaper() if no children
exit: reparent: introduce find_alive_thread()
exit: reparent: introduce find_child_reaper()
exit: reparent: document the ->has_child_subreaper checks
exit: reparent: s/while_each_thread/for_each_thread/ in find_new_reaper()
exit: reparent: fix the cross-namespace PR_SET_CHILD_SUBREAPER reparenting
exit: reparent: fix the dead-parent PR_SET_CHILD_SUBREAPER reparenting
exit: proc: don't try to flush /proc/tgid/task/tgid
exit: release_task: fix the comment about group leader accounting
exit: wait: drop tasklist_lock before psig->c* accounting
exit: wait: don't use zombie->real_parent
exit: wait: cleanup the ptrace_reparented() checks
usermodehelper: kill the kmod_thread_locker logic
usermodehelper: don't use CLONE_VFORK for ____call_usermodehelper()
fs/hfs/catalog.c: fix comparison bug in hfs_cat_keycmp
nilfs2: fix the nilfs_iget() vs. nilfs_new_inode() races
...
Diffstat (limited to 'kernel/printk')
-rw-r--r-- | kernel/printk/printk.c | 49 |
1 files changed, 22 insertions, 27 deletions
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index c8755e7e1dba..ea27c019655a 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c | |||
@@ -62,9 +62,6 @@ int console_printk[4] = { | |||
62 | CONSOLE_LOGLEVEL_DEFAULT, /* default_console_loglevel */ | 62 | CONSOLE_LOGLEVEL_DEFAULT, /* default_console_loglevel */ |
63 | }; | 63 | }; |
64 | 64 | ||
65 | /* Deferred messaged from sched code are marked by this special level */ | ||
66 | #define SCHED_MESSAGE_LOGLEVEL -2 | ||
67 | |||
68 | /* | 65 | /* |
69 | * Low level drivers may need that to know if they can schedule in | 66 | * Low level drivers may need that to know if they can schedule in |
70 | * their unblank() callback or not. So let's export it. | 67 | * their unblank() callback or not. So let's export it. |
@@ -1259,7 +1256,7 @@ static int syslog_print_all(char __user *buf, int size, bool clear) | |||
1259 | int do_syslog(int type, char __user *buf, int len, bool from_file) | 1256 | int do_syslog(int type, char __user *buf, int len, bool from_file) |
1260 | { | 1257 | { |
1261 | bool clear = false; | 1258 | bool clear = false; |
1262 | static int saved_console_loglevel = -1; | 1259 | static int saved_console_loglevel = LOGLEVEL_DEFAULT; |
1263 | int error; | 1260 | int error; |
1264 | 1261 | ||
1265 | error = check_syslog_permissions(type, from_file); | 1262 | error = check_syslog_permissions(type, from_file); |
@@ -1316,15 +1313,15 @@ int do_syslog(int type, char __user *buf, int len, bool from_file) | |||
1316 | break; | 1313 | break; |
1317 | /* Disable logging to console */ | 1314 | /* Disable logging to console */ |
1318 | case SYSLOG_ACTION_CONSOLE_OFF: | 1315 | case SYSLOG_ACTION_CONSOLE_OFF: |
1319 | if (saved_console_loglevel == -1) | 1316 | if (saved_console_loglevel == LOGLEVEL_DEFAULT) |
1320 | saved_console_loglevel = console_loglevel; | 1317 | saved_console_loglevel = console_loglevel; |
1321 | console_loglevel = minimum_console_loglevel; | 1318 | console_loglevel = minimum_console_loglevel; |
1322 | break; | 1319 | break; |
1323 | /* Enable logging to console */ | 1320 | /* Enable logging to console */ |
1324 | case SYSLOG_ACTION_CONSOLE_ON: | 1321 | case SYSLOG_ACTION_CONSOLE_ON: |
1325 | if (saved_console_loglevel != -1) { | 1322 | if (saved_console_loglevel != LOGLEVEL_DEFAULT) { |
1326 | console_loglevel = saved_console_loglevel; | 1323 | console_loglevel = saved_console_loglevel; |
1327 | saved_console_loglevel = -1; | 1324 | saved_console_loglevel = LOGLEVEL_DEFAULT; |
1328 | } | 1325 | } |
1329 | break; | 1326 | break; |
1330 | /* Set level of messages printed to console */ | 1327 | /* Set level of messages printed to console */ |
@@ -1336,7 +1333,7 @@ int do_syslog(int type, char __user *buf, int len, bool from_file) | |||
1336 | len = minimum_console_loglevel; | 1333 | len = minimum_console_loglevel; |
1337 | console_loglevel = len; | 1334 | console_loglevel = len; |
1338 | /* Implicitly re-enable logging to console */ | 1335 | /* Implicitly re-enable logging to console */ |
1339 | saved_console_loglevel = -1; | 1336 | saved_console_loglevel = LOGLEVEL_DEFAULT; |
1340 | error = 0; | 1337 | error = 0; |
1341 | break; | 1338 | break; |
1342 | /* Number of chars in the log buffer */ | 1339 | /* Number of chars in the log buffer */ |
@@ -1627,10 +1624,10 @@ asmlinkage int vprintk_emit(int facility, int level, | |||
1627 | int printed_len = 0; | 1624 | int printed_len = 0; |
1628 | bool in_sched = false; | 1625 | bool in_sched = false; |
1629 | /* cpu currently holding logbuf_lock in this function */ | 1626 | /* cpu currently holding logbuf_lock in this function */ |
1630 | static volatile unsigned int logbuf_cpu = UINT_MAX; | 1627 | static unsigned int logbuf_cpu = UINT_MAX; |
1631 | 1628 | ||
1632 | if (level == SCHED_MESSAGE_LOGLEVEL) { | 1629 | if (level == LOGLEVEL_SCHED) { |
1633 | level = -1; | 1630 | level = LOGLEVEL_DEFAULT; |
1634 | in_sched = true; | 1631 | in_sched = true; |
1635 | } | 1632 | } |
1636 | 1633 | ||
@@ -1695,8 +1692,9 @@ asmlinkage int vprintk_emit(int facility, int level, | |||
1695 | const char *end_of_header = printk_skip_level(text); | 1692 | const char *end_of_header = printk_skip_level(text); |
1696 | switch (kern_level) { | 1693 | switch (kern_level) { |
1697 | case '0' ... '7': | 1694 | case '0' ... '7': |
1698 | if (level == -1) | 1695 | if (level == LOGLEVEL_DEFAULT) |
1699 | level = kern_level - '0'; | 1696 | level = kern_level - '0'; |
1697 | /* fallthrough */ | ||
1700 | case 'd': /* KERN_DEFAULT */ | 1698 | case 'd': /* KERN_DEFAULT */ |
1701 | lflags |= LOG_PREFIX; | 1699 | lflags |= LOG_PREFIX; |
1702 | } | 1700 | } |
@@ -1710,7 +1708,7 @@ asmlinkage int vprintk_emit(int facility, int level, | |||
1710 | } | 1708 | } |
1711 | } | 1709 | } |
1712 | 1710 | ||
1713 | if (level == -1) | 1711 | if (level == LOGLEVEL_DEFAULT) |
1714 | level = default_message_loglevel; | 1712 | level = default_message_loglevel; |
1715 | 1713 | ||
1716 | if (dict) | 1714 | if (dict) |
@@ -1788,7 +1786,7 @@ EXPORT_SYMBOL(vprintk_emit); | |||
1788 | 1786 | ||
1789 | asmlinkage int vprintk(const char *fmt, va_list args) | 1787 | asmlinkage int vprintk(const char *fmt, va_list args) |
1790 | { | 1788 | { |
1791 | return vprintk_emit(0, -1, NULL, 0, fmt, args); | 1789 | return vprintk_emit(0, LOGLEVEL_DEFAULT, NULL, 0, fmt, args); |
1792 | } | 1790 | } |
1793 | EXPORT_SYMBOL(vprintk); | 1791 | EXPORT_SYMBOL(vprintk); |
1794 | 1792 | ||
@@ -1842,7 +1840,7 @@ asmlinkage __visible int printk(const char *fmt, ...) | |||
1842 | } | 1840 | } |
1843 | #endif | 1841 | #endif |
1844 | va_start(args, fmt); | 1842 | va_start(args, fmt); |
1845 | r = vprintk_emit(0, -1, NULL, 0, fmt, args); | 1843 | r = vprintk_emit(0, LOGLEVEL_DEFAULT, NULL, 0, fmt, args); |
1846 | va_end(args); | 1844 | va_end(args); |
1847 | 1845 | ||
1848 | return r; | 1846 | return r; |
@@ -1881,23 +1879,20 @@ static size_t cont_print_text(char *text, size_t size) { return 0; } | |||
1881 | #ifdef CONFIG_EARLY_PRINTK | 1879 | #ifdef CONFIG_EARLY_PRINTK |
1882 | struct console *early_console; | 1880 | struct console *early_console; |
1883 | 1881 | ||
1884 | void early_vprintk(const char *fmt, va_list ap) | ||
1885 | { | ||
1886 | if (early_console) { | ||
1887 | char buf[512]; | ||
1888 | int n = vscnprintf(buf, sizeof(buf), fmt, ap); | ||
1889 | |||
1890 | early_console->write(early_console, buf, n); | ||
1891 | } | ||
1892 | } | ||
1893 | |||
1894 | asmlinkage __visible void early_printk(const char *fmt, ...) | 1882 | asmlinkage __visible void early_printk(const char *fmt, ...) |
1895 | { | 1883 | { |
1896 | va_list ap; | 1884 | va_list ap; |
1885 | char buf[512]; | ||
1886 | int n; | ||
1887 | |||
1888 | if (!early_console) | ||
1889 | return; | ||
1897 | 1890 | ||
1898 | va_start(ap, fmt); | 1891 | va_start(ap, fmt); |
1899 | early_vprintk(fmt, ap); | 1892 | n = vscnprintf(buf, sizeof(buf), fmt, ap); |
1900 | va_end(ap); | 1893 | va_end(ap); |
1894 | |||
1895 | early_console->write(early_console, buf, n); | ||
1901 | } | 1896 | } |
1902 | #endif | 1897 | #endif |
1903 | 1898 | ||
@@ -2634,7 +2629,7 @@ int printk_deferred(const char *fmt, ...) | |||
2634 | 2629 | ||
2635 | preempt_disable(); | 2630 | preempt_disable(); |
2636 | va_start(args, fmt); | 2631 | va_start(args, fmt); |
2637 | r = vprintk_emit(0, SCHED_MESSAGE_LOGLEVEL, NULL, 0, fmt, args); | 2632 | r = vprintk_emit(0, LOGLEVEL_SCHED, NULL, 0, fmt, args); |
2638 | va_end(args); | 2633 | va_end(args); |
2639 | 2634 | ||
2640 | __this_cpu_or(printk_pending, PRINTK_PENDING_OUTPUT); | 2635 | __this_cpu_or(printk_pending, PRINTK_PENDING_OUTPUT); |