diff options
author | Linas Vepstas <linas@austin.ibm.com> | 2007-08-08 16:06:15 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-08-16 21:01:52 -0400 |
commit | 79c0108d1b9db4864ab77b2a95dfa04f2dcf264c (patch) | |
tree | 861b770063674cdf7c4561b51dfabc4df4d13b85 | |
parent | 72755f44075d34cdb9bc467c6cd9a229292b5aff (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.c | 8 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/rtasd.c | 14 |
2 files changed, 6 insertions, 16 deletions
diff --git a/arch/powerpc/kernel/nvram_64.c b/arch/powerpc/kernel/nvram_64.c index ba979908d17d..4a4d785a08d3 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; | |||
38 | static long nvram_error_log_index = -1; | 38 | static long nvram_error_log_index = -1; |
39 | static long nvram_error_log_size = 0; | 39 | static long nvram_error_log_size = 0; |
40 | 40 | ||
41 | int no_logging = 1; /* Until we initialize everything, | ||
42 | * make sure we don't try logging | ||
43 | * anything */ | ||
44 | |||
45 | extern volatile int error_log_cnt; | 41 | extern volatile int error_log_cnt; |
46 | 42 | ||
47 | struct err_log_info { | 43 | struct 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 d902097646b7..b802a272bd29 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 | ||
54 | static int full_rtas_msgs = 0; | 54 | static int full_rtas_msgs = 0; |
55 | 55 | ||
56 | extern int no_logging; | 56 | /* Stop logging to nvram after first fatal error */ |
57 | static int no_more_logging; | ||
57 | 58 | ||
58 | volatile int error_log_cnt = 0; | 59 | volatile 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); |