Re: [PATCH 16/29] powerpc/rtas: dispatch partition migration requests to pseries
From: Nathan Lynch <hidden>
Date: 2020-12-04 16:08:10
Michael Ellerman [off-list ref] writes:
Nathan Lynch [off-list ref] writes:quoted
sys_rtas() cannot call ibm,suspend-me directly in the same way it handles other inputs. Instead it must dispatch the request to code that can first perform the H_JOIN sequence before any call to ibm,suspend-me can succeed. Over time kernel/rtas.c has accreted a fair amount of platform-specific code to implement this. Since a different, more robust implementation of the suspend sequence is now in the pseries platform code, we want to dispatch the request there while minimizing additional dependence on pseries. Use a weak function that only pseries overrides.Over the years weak functions have caused their fair share of problems. There are cases where they are the cleanest option, but for intra-arch code like this I think and ifdef is much simpler.
Fair enough, I wasn't all that confident about this anyway.
quoted
diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rtas.h index fdefe6a974eb..be0fc2536673 100644 --- a/arch/powerpc/include/asm/rtas.h +++ b/arch/powerpc/include/asm/rtas.h@@ -260,6 +260,7 @@ extern int rtas_suspend_cpu(struct rtas_suspend_me_data *data); extern int rtas_suspend_last_cpu(struct rtas_suspend_me_data *data); int rtas_ibm_suspend_me_unsafe(u64 handle); int rtas_ibm_suspend_me(int *fw_status); +int rtas_syscall_dispatch_ibm_suspend_me(u64 handle);ie. we'd just do: #ifdef CONFIG_PPC_PSERIES int rtas_syscall_dispatch_ibm_suspend_me(u64 handle); #else int rtas_syscall_dispatch_ibm_suspend_me(u64 handle) { return -EINVAL; } #endif
Yep will do.