diff options
Diffstat (limited to 'arch/powerpc/kernel/rtas.c')
| -rw-r--r-- | arch/powerpc/kernel/rtas.c | 45 | 
1 files changed, 24 insertions, 21 deletions
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index c087eeee320f..eddc031c4b95 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c @@ -1330,33 +1330,34 @@ bool __ref rtas_busy_delay(int status)  }  EXPORT_SYMBOL_GPL(rtas_busy_delay); -static int rtas_error_rc(int rtas_rc) +int rtas_error_rc(int rtas_rc)  {  	int rc;  	switch (rtas_rc) { -		case -1: 		/* Hardware Error */ -			rc = -EIO; -			break; -		case -3:		/* Bad indicator/domain/etc */ -			rc = -EINVAL; -			break; -		case -9000:		/* Isolation error */ -			rc = -EFAULT; -			break; -		case -9001:		/* Outstanding TCE/PTE */ -			rc = -EEXIST; -			break; -		case -9002:		/* No usable slot */ -			rc = -ENODEV; -			break; -		default: -			pr_err("%s: unexpected error %d\n", __func__, rtas_rc); -			rc = -ERANGE; -			break; +	case RTAS_HARDWARE_ERROR:	/* Hardware Error */ +		rc = -EIO; +		break; +	case RTAS_INVALID_PARAMETER:	/* Bad indicator/domain/etc */ +		rc = -EINVAL; +		break; +	case -9000:			/* Isolation error */ +		rc = -EFAULT; +		break; +	case -9001:			/* Outstanding TCE/PTE */ +		rc = -EEXIST; +		break; +	case -9002:			/* No usable slot */ +		rc = -ENODEV; +		break; +	default: +		pr_err("%s: unexpected error %d\n", __func__, rtas_rc); +		rc = -ERANGE; +		break;  	}  	return rc;  } +EXPORT_SYMBOL_GPL(rtas_error_rc);  int rtas_get_power_level(int powerdomain, int *level)  { @@ -1587,6 +1588,7 @@ static bool ibm_extended_os_term;  void rtas_os_term(char *str)  {  	s32 token = rtas_function_token(RTAS_FN_IBM_OS_TERM); +	static struct rtas_args args;  	int status;  	/* @@ -1607,7 +1609,8 @@ void rtas_os_term(char *str)  	 * schedules.  	 */  	do { -		status = rtas_call(token, 1, 1, NULL, __pa(rtas_os_term_buf)); +		rtas_call_unlocked(&args, token, 1, 1, NULL, __pa(rtas_os_term_buf)); +		status = be32_to_cpu(args.rets[0]);  	} while (rtas_busy_delay_time(status));  	if (status != 0)  |