--- arch/ppc64/kernel/rtasd.c.orig 2004-06-28 15:33:12.000000000 -0500 +++ arch/ppc64/kernel/rtasd.c 2004-06-29 18:51:31.000000000 -0500 @@ -57,6 +57,8 @@ volatile int error_log_cnt = 0; */ 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 * will be collected together with obvious begin/end. * There will be a unique identifier on the begin and end lines. @@ -121,6 +123,9 @@ static int log_rtas_len(char * buf) len += err->extended_log_length; } + if (rtas_error_log_max == 0) { + get_eventscan_parms(); + } if (len > rtas_error_log_max) len = rtas_error_log_max; @@ -148,7 +153,6 @@ void pSeries_log_error(char *buf, unsign int len = 0; DEBUG("logging event\n"); - if (buf == NULL) return; @@ -171,6 +175,13 @@ void pSeries_log_error(char *buf, unsign if (!no_more_logging && !(err_type & ERR_FLAG_BOOT)) 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 */ if (fatal || no_more_logging) { no_more_logging = 1;