Revert "[POWERPC] Fix RTAS os-term usage on kernel panic"
authorPaul Mackerras <paulus@samba.org>
Sun, 2 Dec 2007 22:30:04 +0000 (09:30 +1100)
committerPaul Mackerras <paulus@samba.org>
Sun, 2 Dec 2007 22:39:45 +0000 (09:39 +1100)
This reverts commit a2b51812a4dc5db09ab4d4638d4d8ed456e2457e.

It turns out that this change caused some machines to fail to come
back up when being rebooted, and generated an error in the hypervisor
error log on some machines.  The platform architecture (PAPR) is a
little unclear on exactly when the RTAS ibm,os-term function should be
called.  Until that is clarified I'm reverting this commit.

Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/kernel/rtas.c
arch/powerpc/platforms/pseries/setup.c
include/asm-powerpc/rtas.h

index 053cac19f71414f3ac4956cdf4c66cb903af8294..52e95c2158c02418789d3e238b96b31ee42aa9d1 100644 (file)
@@ -638,18 +638,18 @@ void rtas_halt(void)
 /* Must be in the RMO region, so we place it here */
 static char rtas_os_term_buf[2048];
 
-void rtas_panic_msg(char *str)
-{
-       snprintf(rtas_os_term_buf, 2048, "OS panic: %s", str);
-}
-
-void rtas_os_term(void)
+void rtas_os_term(char *str)
 {
        int status;
 
+       if (panic_timeout)
+               return;
+
        if (RTAS_UNKNOWN_SERVICE == rtas_token("ibm,os-term"))
                return;
 
+       snprintf(rtas_os_term_buf, 2048, "OS panic: %s", str);
+
        do {
                status = rtas_call(rtas_token("ibm,os-term"), 1, 1, NULL,
                                   __pa(rtas_os_term_buf));
index fdeefe54ea91356fa4ad9d3526577a751a4fc022..fdb9b1c8f977e06704c714ff5d0c54366923fef4 100644 (file)
@@ -507,8 +507,7 @@ define_machine(pseries) {
        .restart                = rtas_restart,
        .power_off              = pSeries_power_off,
        .halt                   = rtas_halt,
-       .panic                  = rtas_panic_msg,
-       .machine_shutdown       = rtas_os_term,
+       .panic                  = rtas_os_term,
        .get_boot_time          = rtas_get_boot_time,
        .get_rtc_time           = rtas_get_rtc_time,
        .set_rtc_time           = rtas_set_rtc_time,
index 87db8728e82d196b3ecfc2c73ce6d9a9e6318eb0..8eaa7b28d9d07d59ad6d2f0a6cb83187380ec8b3 100644 (file)
@@ -164,8 +164,7 @@ extern int rtas_call(int token, int, int, int *, ...);
 extern void rtas_restart(char *cmd);
 extern void rtas_power_off(void);
 extern void rtas_halt(void);
-extern void rtas_panic_msg(char *str);
-extern void rtas_os_term(void);
+extern void rtas_os_term(char *str);
 extern int rtas_get_sensor(int sensor, int index, int *state);
 extern int rtas_get_power_level(int powerdomain, int *level);
 extern int rtas_set_power_level(int powerdomain, int level, int *setlevel);