Michael Ellerman <m...@ellerman.id.au> writes: > Nathan Lynch <nath...@linux.ibm.com> writes: >> 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. >> 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.