Commit 8a163c94 authored by Paul Mackerras's avatar Paul Mackerras Committed by Linus Torvalds

[PATCH] ppc64: log firmware errors during boot

Firmware can report errors at any time, and not atypically during boot. 
However, these reports were being discarded until th rtasd comes up, which
occurs fairly late in the boot cycle.  As a result, firmware errors during
boot were being silently ignored.
Signed-off-by: default avatarLinas Vepstas <linas@linas.org>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent cab74470
...@@ -57,6 +57,8 @@ volatile int error_log_cnt = 0; ...@@ -57,6 +57,8 @@ volatile int error_log_cnt = 0;
*/ */
static unsigned char logdata[RTAS_ERROR_LOG_MAX]; static unsigned char logdata[RTAS_ERROR_LOG_MAX];
static int get_eventscan_parms(void);
/* To see this info, grep RTAS /var/log/messages and each entry /* To see this info, grep RTAS /var/log/messages and each entry
* will be collected together with obvious begin/end. * will be collected together with obvious begin/end.
* There will be a unique identifier on the begin and end lines. * There will be a unique identifier on the begin and end lines.
...@@ -121,6 +123,9 @@ static int log_rtas_len(char * buf) ...@@ -121,6 +123,9 @@ static int log_rtas_len(char * buf)
len += err->extended_log_length; len += err->extended_log_length;
} }
if (rtas_error_log_max == 0) {
get_eventscan_parms();
}
if (len > rtas_error_log_max) if (len > rtas_error_log_max)
len = rtas_error_log_max; len = rtas_error_log_max;
...@@ -148,7 +153,6 @@ void pSeries_log_error(char *buf, unsigned int err_type, int fatal) ...@@ -148,7 +153,6 @@ void pSeries_log_error(char *buf, unsigned int err_type, int fatal)
int len = 0; int len = 0;
DEBUG("logging event\n"); DEBUG("logging event\n");
if (buf == NULL) if (buf == NULL)
return; return;
...@@ -171,6 +175,13 @@ void pSeries_log_error(char *buf, unsigned int err_type, int fatal) ...@@ -171,6 +175,13 @@ void pSeries_log_error(char *buf, unsigned int err_type, int fatal)
if (!no_more_logging && !(err_type & ERR_FLAG_BOOT)) if (!no_more_logging && !(err_type & ERR_FLAG_BOOT))
nvram_write_error_log(buf, len, err_type); nvram_write_error_log(buf, len, err_type);
/* rtas errors can occur during boot, and we do want to capture
* those somewhere, even if nvram isn't ready (why not?), and even
* if rtasd isn't ready. Put them into the boot log, at least. */
if ((err_type & ERR_TYPE_MASK) == ERR_TYPE_RTAS_LOG) {
printk_log_rtas(buf, len);
}
/* Check to see if we need to or have stopped logging */ /* Check to see if we need to or have stopped logging */
if (fatal || no_more_logging) { if (fatal || no_more_logging) {
no_more_logging = 1; no_more_logging = 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment