Reviewed-by: Pierre Moreau <pierre.mor...@free.fr>

On 2017-09-15 — 17:11, Karol Herbst wrote:
> Otherwise hwmon interprets error codes as real values.
> 
> Signed-off-by: Karol Herbst <karolher...@gmail.com>
> ---
>  drm/nouveau/nouveau_hwmon.c | 33 ++++++++++++++++++++++++++-------
>  1 file changed, 26 insertions(+), 7 deletions(-)
> 
> diff --git a/drm/nouveau/nouveau_hwmon.c b/drm/nouveau/nouveau_hwmon.c
> index f1914d9a..0d75c14d 100644
> --- a/drm/nouveau/nouveau_hwmon.c
> +++ b/drm/nouveau/nouveau_hwmon.c
> @@ -470,18 +470,23 @@ nouveau_fan_read(struct device *dev, u32 attr, int 
> channel, long *val)
>       struct drm_device *drm_dev = dev_get_drvdata(dev);
>       struct nouveau_drm *drm = nouveau_drm(drm_dev);
>       struct nvkm_therm *therm = nvxx_therm(&drm->client.device);
> +     int ret;
>  
>       if (!therm)
>               return -EOPNOTSUPP;
>  
>       switch (attr) {
>       case hwmon_fan_input:
> -             *val = nvkm_therm_fan_sense(therm);
> +             ret = nvkm_therm_fan_sense(therm);
>               break;
>       default:
>               return -EOPNOTSUPP;
>       }
>  
> +     if (ret < 0)
> +             return ret;
> +
> +     *val = ret;
>       return 0;
>  }
>  
> @@ -491,7 +496,7 @@ nouveau_in_read(struct device *dev, u32 attr, int 
> channel, long *val)
>       struct drm_device *drm_dev = dev_get_drvdata(dev);
>       struct nouveau_drm *drm = nouveau_drm(drm_dev);
>       struct nvkm_volt *volt = nvxx_volt(&drm->client.device);
> -     int ret;
> +     int ret = 0;
>  
>       if (!volt)
>               return -EOPNOTSUPP;
> @@ -499,7 +504,8 @@ nouveau_in_read(struct device *dev, u32 attr, int 
> channel, long *val)
>       switch (attr) {
>       case hwmon_in_input:
>               ret = nvkm_volt_get(volt);
> -             *val = ret < 0 ? ret : (ret / 1000);
> +             if (ret >= 0)
> +                     *val = ret / 1000;
>               break;
>       case hwmon_in_min:
>               *val = volt->min_uv > 0 ? (volt->min_uv / 1000) : -ENODEV;
> @@ -511,7 +517,7 @@ nouveau_in_read(struct device *dev, u32 attr, int 
> channel, long *val)
>               return -EOPNOTSUPP;
>       }
>  
> -     return 0;
> +     return ret;
>  }
>  
>  static int
> @@ -520,21 +526,26 @@ nouveau_pwm_read(struct device *dev, u32 attr, int 
> channel, long *val)
>       struct drm_device *drm_dev = dev_get_drvdata(dev);
>       struct nouveau_drm *drm = nouveau_drm(drm_dev);
>       struct nvkm_therm *therm = nvxx_therm(&drm->client.device);
> +     int ret;
>  
>       if (!therm || !therm->attr_get || !therm->fan_get)
>               return -EOPNOTSUPP;
>  
>       switch (attr) {
>       case hwmon_pwm_enable:
> -             *val = therm->attr_get(therm, NVKM_THERM_ATTR_FAN_MODE);
> +             ret = therm->attr_get(therm, NVKM_THERM_ATTR_FAN_MODE);
>               break;
>       case hwmon_pwm_input:
> -             *val = therm->fan_get(therm);
> +             ret = therm->fan_get(therm);
>               break;
>       default:
>               return -EOPNOTSUPP;
>       }
>  
> +     if (ret < 0)
> +             return ret;
> +
> +     *val = ret;
>       return 0;
>  }
>  
> @@ -544,18 +555,26 @@ nouveau_power_read(struct device *dev, u32 attr, int 
> channel, long *val)
>       struct drm_device *drm_dev = dev_get_drvdata(dev);
>       struct nouveau_drm *drm = nouveau_drm(drm_dev);
>       struct nvkm_iccsense *iccsense = nvxx_iccsense(&drm->client.device);
> +     int ret;
>  
>       if (!iccsense)
>               return -EOPNOTSUPP;
>  
>       switch (attr) {
>       case hwmon_power_input:
> -             *val = nvkm_iccsense_read_all(iccsense);
> +             ret = nvkm_iccsense_read_all(iccsense);
> +             if (ret < 0)
> +                     return ret;
> +             *val = ret;
>               break;
>       case hwmon_power_max:
> +             if (iccsense->power_w_max <= 0)
> +                     return -ENODEV;
>               *val = iccsense->power_w_max;
>               break;
>       case hwmon_power_crit:
> +             if (iccsense->power_w_crit <= 0)
> +                     return -ENODEV;
>               *val = iccsense->power_w_crit;
>               break;
>       default:
> -- 
> 2.14.1
> 
> _______________________________________________
> Nouveau mailing list
> Nouveau@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/nouveau

Attachment: signature.asc
Description: PGP signature

_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to