On 03/27/2015 10:59 AM, Michael Ellerman wrote:
> On Thu, 2015-26-03 at 16:04:45 UTC, =?utf-8?q?C=C3=A9dric_Le_Goater?= wrote:
>> OPAL has its own list of return codes. The patch provides a translation
>> of such codes in errnos for the opal_sensor_read call.
>>
>> Signed-off-by: Cédric Le Goater <c...@fr.ibm.com>
>> ---
>>  arch/powerpc/platforms/powernv/opal-sensor.c |   37 
>> ++++++++++++++++++++++++++-
>>  1 file changed, 36 insertions(+), 1 deletion(-)
>>
>> Index: linux.git/arch/powerpc/platforms/powernv/opal-sensor.c
>> ===================================================================
>> --- linux.git.orig/arch/powerpc/platforms/powernv/opal-sensor.c
>> +++ linux.git/arch/powerpc/platforms/powernv/opal-sensor.c
>> @@ -26,6 +26,38 @@
>   
>> +static int convert_opal_code(int ret)
>> +{
>> +    switch (ret) {
>> +    case OPAL_SUCCESS:              return 0;
>> +    case OPAL_PARAMETER:            return -EINVAL;
>> +    case OPAL_UNSUPPORTED:          return -ENOSYS;
>> +    case OPAL_ASYNC_COMPLETION:     return -EAGAIN;
>> +    case OPAL_BUSY_EVENT:           return -EBUSY;
>> +    case OPAL_NO_MEM:               return -ENOMEM;
>> +    case OPAL_HARDWARE:             return -ENOENT;
>> +    case OPAL_INTERNAL_ERROR:       return -EIO;
>> +    default:                        return -EIO;
>> +    }
>> +}
> 
> That looks a bit familiar :)

Ah ! I only looked in opal ...

> static 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:
>                       printk(KERN_ERR "%s: unexpected RTAS error %d\n",
>                                       __func__, rtas_rc);
>                       rc = -ERANGE;

this a better code default value.


>                       break;
>       }
>       return rc;
> }
> 
> 
> But I guess we still should have it.
> 
> Can you put it in opal.h and give it a better name, maybe opal_error_code() ?

Sure. I will change the name but opal.c looks better, knowing that opal.h is 
shared with skiboot.

> 
>>  /*
>>   * This will return sensor information to driver based on the requested 
>> sensor
>>   * handle. A handle is an opaque id for the powernv, read by the driver 
>> from the
>> @@ -46,8 +78,10 @@ int opal_get_sensor_data(u32 sensor_hndl
>>  
>>      mutex_lock(&opal_sensor_mutex);
>>      ret = opal_sensor_read(sensor_hndl, token, &data);
>> -    if (ret != OPAL_ASYNC_COMPLETION)
>> +    if (ret != OPAL_ASYNC_COMPLETION) {
>> +            ret = convert_opal_code(ret);
>>              goto out_token;
>> +    }
>>  
>>      ret = opal_async_wait_response(token, &msg);
>>      if (ret) {
>> @@ -58,6 +92,7 @@ int opal_get_sensor_data(u32 sensor_hndl
>>  
>>      *sensor_data = be32_to_cpu(data);
>>      ret = be64_to_cpu(msg.params[1]);
>> +    ret = convert_opal_code(ret);
> 
> I'd do:
>       ret = convert_opal_code(be64_to_cpu(msg.params[1]));

Yes. the double 'ret =' is ugly.

Thanks,

C. 

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to