From: Paul Mackerras This patch from Linas Vepstas (rediffed by me) fixes the confusing argument aliasing of the log_rtas_error() subroutine. This patch makes no functional changes, it just cleans up some strange usage. The rtas_args used to communicate with firmware are always taken from the paca struct, so as to keep the args at a fixed, low-memory location. But the log_rtas_error() routine also took an rtas_args pointer, which it assumed was aliased to the paca struct. This aliasing is both un-neccessary, and confusing; this patch eliminates this confusion. Signed-off-by: Linas Vepstas Signed-off-by: Paul Mackerras Signed-off-by: Andrew Morton --- 25-akpm/arch/ppc64/kernel/rtas.c | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-) diff -puN arch/ppc64/kernel/rtas.c~ppc64-janitor-log_rtas_error-call-arguments arch/ppc64/kernel/rtas.c --- 25/arch/ppc64/kernel/rtas.c~ppc64-janitor-log_rtas_error-call-arguments 2004-06-30 10:56:21.612618760 -0700 +++ 25-akpm/arch/ppc64/kernel/rtas.c 2004-06-30 10:56:21.625616784 -0700 @@ -75,9 +75,9 @@ rtas_token(const char *service) static int -__log_rtas_error(struct rtas_args *rtas_args) +__log_rtas_error(void) { - struct rtas_args err_args, temp_args; + struct rtas_args err_args, save_args; err_args.token = rtas_token("rtas-last-error"); err_args.nargs = 2; @@ -88,7 +88,7 @@ __log_rtas_error(struct rtas_args *rtas_ err_args.args[1] = RTAS_ERROR_LOG_MAX; err_args.args[2] = 0; - temp_args = *rtas_args; + save_args = rtas.args; rtas.args = err_args; PPCDBG(PPCDBG_RTAS, "\tentering rtas with 0x%lx\n", @@ -97,19 +97,19 @@ __log_rtas_error(struct rtas_args *rtas_ PPCDBG(PPCDBG_RTAS, "\treturned from rtas ...\n"); err_args = rtas.args; - rtas.args = temp_args; + rtas.args = save_args; return err_args.rets[0]; } void -log_rtas_error(struct rtas_args *rtas_args) +log_rtas_error(void) { unsigned long s; int rc; spin_lock_irqsave(&rtas.lock, s); - rc = __log_rtas_error(rtas_args); + rc = __log_rtas_error(); spin_unlock_irqrestore(&rtas.lock, s); if (rc == 0) log_error(rtas_err_buf, ERR_TYPE_RTAS_LOG, 0); @@ -155,7 +155,7 @@ int rtas_call(int token, int nargs, int PPCDBG(PPCDBG_RTAS, "\treturned from rtas ...\n"); if (rtas_args->rets[0] == -1) - logit = (__log_rtas_error(rtas_args) == 0); + logit = (__log_rtas_error() == 0); ifppcdebug(PPCDBG_RTAS) { for(i=0; i < nret ;i++) @@ -447,7 +447,7 @@ asmlinkage int ppc_rtas(struct rtas_args args.rets = (rtas_arg_t *)&(args.args[nargs]); if (args.rets[0] == -1) - log_rtas_error(&args); + log_rtas_error(); /* Copy out args. */ if (copy_to_user(uargs->args + nargs, _