Commit e9bbc8cd authored by Anton Blanchard's avatar Anton Blanchard Committed by Benjamin Herrenschmidt

powerpc/pseries: Call ibm,os-term if the ibm,extended-os-term is present

We have had issues in the past with ibm,os-term initiating shutdown of a
partition. This is confusing to the user, especially if panic_timeout is
non zero.

The temporary fix was to avoid calling ibm,os-term if a panic_timeout was set
and since we set it on every boot we basically never call ibm,os-term.

An extended version of ibm,os-term has since been implemented which gives us
the behaviour we want:

  "When the platform supports extended ibm,os-term behavior, the return to the
  RTAS will always occur unless there is a kernel assisted dump active as
  initiated by an ibm,configure-kernel-dump call."

This patch checks for the ibm,extended-os-term property and calls ibm,os-term
if it exists.
Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 27f10907
...@@ -691,10 +691,14 @@ void rtas_os_term(char *str) ...@@ -691,10 +691,14 @@ void rtas_os_term(char *str)
{ {
int status; int status;
if (panic_timeout) /*
return; * Firmware with the ibm,extended-os-term property is guaranteed
* to always return from an ibm,os-term call. Earlier versions without
if (RTAS_UNKNOWN_SERVICE == rtas_token("ibm,os-term")) * this property may terminate the partition which we want to avoid
* since it interferes with panic_timeout.
*/
if (RTAS_UNKNOWN_SERVICE == rtas_token("ibm,os-term") ||
RTAS_UNKNOWN_SERVICE == rtas_token("ibm,extended-os-term"))
return; return;
snprintf(rtas_os_term_buf, 2048, "OS panic: %s", str); snprintf(rtas_os_term_buf, 2048, "OS panic: %s", str);
...@@ -705,8 +709,7 @@ void rtas_os_term(char *str) ...@@ -705,8 +709,7 @@ void rtas_os_term(char *str)
} while (rtas_busy_delay(status)); } while (rtas_busy_delay(status));
if (status != 0) if (status != 0)
printk(KERN_EMERG "ibm,os-term call failed %d\n", printk(KERN_EMERG "ibm,os-term call failed %d\n", status);
status);
} }
static int ibm_suspend_me_token = RTAS_UNKNOWN_SERVICE; static int ibm_suspend_me_token = RTAS_UNKNOWN_SERVICE;
......
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