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: Anton Blanchard <anton@samba.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
committed by
Benjamin Herrenschmidt
parent
27f10907b7
commit
e9bbc8cde0
@@ -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)
|
|||||||
} 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;
|
||||||
|
Reference in New Issue
Block a user