diff options
Diffstat (limited to 'kernel/printk.c')
| -rw-r--r-- | kernel/printk.c | 26 | 
1 files changed, 24 insertions, 2 deletions
diff --git a/kernel/printk.c b/kernel/printk.c index e3602d0755b..5052b5497c6 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -32,6 +32,7 @@  #include <linux/security.h>  #include <linux/bootmem.h>  #include <linux/syscalls.h> +#include <linux/kexec.h>  #include <asm/uaccess.h> @@ -135,6 +136,24 @@ static char *log_buf = __log_buf;  static int log_buf_len = __LOG_BUF_LEN;  static unsigned logged_chars; /* Number of chars produced since last read+clear operation */ +#ifdef CONFIG_KEXEC +/* + * This appends the listed symbols to /proc/vmcoreinfo + * + * /proc/vmcoreinfo is used by various utiilties, like crash and makedumpfile to + * obtain access to symbols that are otherwise very difficult to locate.  These + * symbols are specifically used so that utilities can access and extract the + * dmesg log from a vmcore file after a crash. + */ +void log_buf_kexec_setup(void) +{ +	VMCOREINFO_SYMBOL(log_buf); +	VMCOREINFO_SYMBOL(log_end); +	VMCOREINFO_SYMBOL(log_buf_len); +	VMCOREINFO_SYMBOL(logged_chars); +} +#endif +  static int __init log_buf_len_setup(char *str)  {  	unsigned size = memparse(str, &str); @@ -1292,8 +1311,11 @@ EXPORT_SYMBOL(printk_ratelimit);  bool printk_timed_ratelimit(unsigned long *caller_jiffies,  			unsigned int interval_msecs)  { -	if (*caller_jiffies == 0 || time_after(jiffies, *caller_jiffies)) { -		*caller_jiffies = jiffies + msecs_to_jiffies(interval_msecs); +	if (*caller_jiffies == 0 +			|| !time_in_range(jiffies, *caller_jiffies, +					*caller_jiffies +					+ msecs_to_jiffies(interval_msecs))) { +		*caller_jiffies = jiffies;  		return true;  	}  	return false;  |