aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinas Vepstas <linas@austin.ibm.com>2007-08-08 16:06:15 -0400
committerPaul Mackerras <paulus@samba.org>2007-08-16 21:01:52 -0400
commit79c0108d1b9db4864ab77b2a95dfa04f2dcf264c (patch)
tree861b770063674cdf7c4561b51dfabc4df4d13b85
parent72755f44075d34cdb9bc467c6cd9a229292b5aff (diff)
[POWERPC] pseries: Fix jumbled no_logging flag
Get rid of the jumbled usage of the no_logging flag. Its use spans several directories, and is incorrectly/misleadingly documented. Instead, two changes: 1) nvram will accept error log as soon as its ready. 2) logging to nvram stops on the first fatal error reported. Signed-off-by: Linas Vepstas <linas@austin.ibm.com> ---- arch/powerpc/kernel/nvram_64.c | 8 -------- arch/powerpc/platforms/pseries/rtasd.c | 14 ++++++-------- 2 files changed, 6 insertions(+), 16 deletions(-) Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r--arch/powerpc/kernel/nvram_64.c8
-rw-r--r--arch/powerpc/platforms/pseries/rtasd.c14
2 files changed, 6 insertions, 16 deletions
diff --git a/arch/powerpc/kernel/nvram_64.c b/arch/powerpc/kernel/nvram_64.c
index ba979908d17..4a4d785a08d 100644
--- a/arch/powerpc/kernel/nvram_64.c
+++ b/arch/powerpc/kernel/nvram_64.c
@@ -38,10 +38,6 @@ static struct nvram_partition * nvram_part;
38static long nvram_error_log_index = -1; 38static long nvram_error_log_index = -1;
39static long nvram_error_log_size = 0; 39static long nvram_error_log_size = 0;
40 40
41int no_logging = 1; /* Until we initialize everything,
42 * make sure we don't try logging
43 * anything */
44
45extern volatile int error_log_cnt; 41extern volatile int error_log_cnt;
46 42
47struct err_log_info { 43struct err_log_info {
@@ -637,10 +633,6 @@ int nvram_write_error_log(char * buff, int length, unsigned int err_type)
637 loff_t tmp_index; 633 loff_t tmp_index;
638 struct err_log_info info; 634 struct err_log_info info;
639 635
640 if (no_logging) {
641 return -EPERM;
642 }
643
644 if (nvram_error_log_index == -1) { 636 if (nvram_error_log_index == -1) {
645 return -ESPIPE; 637 return -ESPIPE;
646 } 638 }
diff --git a/arch/powerpc/platforms/pseries/rtasd.c b/arch/powerpc/platforms/pseries/rtasd.c
index d902097646b..b802a272bd2 100644
--- a/arch/powerpc/platforms/pseries/rtasd.c
+++ b/arch/powerpc/platforms/pseries/rtasd.c
@@ -53,7 +53,8 @@ static unsigned int rtas_event_scan_rate;
53 53
54static int full_rtas_msgs = 0; 54static int full_rtas_msgs = 0;
55 55
56extern int no_logging; 56/* Stop logging to nvram after first fatal error */
57static int no_more_logging;
57 58
58volatile int error_log_cnt = 0; 59volatile int error_log_cnt = 0;
59 60
@@ -216,7 +217,7 @@ void pSeries_log_error(char *buf, unsigned int err_type, int fatal)
216 } 217 }
217 218
218 /* Write error to NVRAM */ 219 /* Write error to NVRAM */
219 if (!no_logging && !(err_type & ERR_FLAG_BOOT)) 220 if (!no_more_logging && !(err_type & ERR_FLAG_BOOT))
220 nvram_write_error_log(buf, len, err_type); 221 nvram_write_error_log(buf, len, err_type);
221 222
222 /* 223 /*
@@ -228,8 +229,8 @@ void pSeries_log_error(char *buf, unsigned int err_type, int fatal)
228 printk_log_rtas(buf, len); 229 printk_log_rtas(buf, len);
229 230
230 /* Check to see if we need to or have stopped logging */ 231 /* Check to see if we need to or have stopped logging */
231 if (fatal || no_logging) { 232 if (fatal || no_more_logging) {
232 no_logging = 1; 233 no_more_logging = 1;
233 spin_unlock_irqrestore(&rtasd_log_lock, s); 234 spin_unlock_irqrestore(&rtasd_log_lock, s);
234 return; 235 return;
235 } 236 }
@@ -301,7 +302,7 @@ static ssize_t rtas_log_read(struct file * file, char __user * buf,
301 302
302 spin_lock_irqsave(&rtasd_log_lock, s); 303 spin_lock_irqsave(&rtasd_log_lock, s);
303 /* if it's 0, then we know we got the last one (the one in NVRAM) */ 304 /* if it's 0, then we know we got the last one (the one in NVRAM) */
304 if (rtas_log_size == 0 && !no_logging) 305 if (rtas_log_size == 0 && !no_more_logging)
305 nvram_clear_error_log(); 306 nvram_clear_error_log();
306 spin_unlock_irqrestore(&rtasd_log_lock, s); 307 spin_unlock_irqrestore(&rtasd_log_lock, s);
307 308
@@ -413,9 +414,6 @@ static int rtasd(void *unused)
413 memset(logdata, 0, rtas_error_log_max); 414 memset(logdata, 0, rtas_error_log_max);
414 rc = nvram_read_error_log(logdata, rtas_error_log_max, &err_type); 415 rc = nvram_read_error_log(logdata, rtas_error_log_max, &err_type);
415 416
416 /* We can use rtas_log_buf now */
417 no_logging = 0;
418
419 if (!rc) { 417 if (!rc) {
420 if (err_type != ERR_FLAG_ALREADY_LOGGED) { 418 if (err_type != ERR_FLAG_ALREADY_LOGGED) {
421 pSeries_log_error(logdata, err_type | ERR_FLAG_BOOT, 0); 419 pSeries_log_error(logdata, err_type | ERR_FLAG_BOOT, 0);