[Skiboot] [PATCH 2/2] sensors: occ: Fix a bug when sensor values are zero
Vaidyanathan Srinivasan
svaidy at linux.ibm.com
Fri Apr 24 19:29:50 AEST 2020
* Gautham R Shenoy <ego at linux.vnet.ibm.com> [2020-04-24 12:11:15]:
> From: "Gautham R. Shenoy" <ego at linux.vnet.ibm.com>
>
> The commit 1b9a449d ("opal-api: add endian conversions to most opal
> calls") modified the code in opal_read_sensor() to make it
> Little-Endian safe. In the process, it changed the code so that if a
> sensor value was zero, it would simply return OPAL_SUCCESS without
> updating the return buffer. As a result, the return buffer contained
> bogus values which were reflected on those sensors being read by the
> Kernel.
>
> This patch fixes it by ensuring that the return buffer is updated with
> the value read from the sensor every time.
>
> Thanks to Vaidyanathan Srinivasan <svaidy at linux.vnet.ibm.com> for
> spotting the missing return-buffer update.
>
> Fixes: commit 1b9a449d ("opal-api: add endian conversions to most opal
> calls")
> Reported-by: Pavaman Subramaniyam <pavsubra at in.ibm.com>
> Tested-by: Pavaman Subramaniyam <pavsubra at in.ibm.com>
> Signed-off-by: Gautham R. Shenoy <ego at linux.vnet.ibm.com>
Reviewed-by: Vaidyanathan Srinivasan <svaidy at linux.ibm.com>
> ---
> hw/occ-sensor.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/hw/occ-sensor.c b/hw/occ-sensor.c
> index a5d0974..76d63f3 100644
> --- a/hw/occ-sensor.c
> +++ b/hw/occ-sensor.c
> @@ -276,7 +276,7 @@ int occ_sensor_read(u32 handle, __be64 *data)
>
> d = read_sensor(buff, attr);
> if (!d)
> - return OPAL_SUCCESS;
> + goto out_success;
>
> md = get_names_block(hb);
> if (be16_to_cpu(md[id].type) == OCC_SENSOR_TYPE_POWER && attr == SENSOR_ACCUMULATOR)
> @@ -284,6 +284,7 @@ int occ_sensor_read(u32 handle, __be64 *data)
> else
> scale_sensor(&md[id], &d);
>
> +out_success:
> *data = cpu_to_be64(d);
>
> return OPAL_SUCCESS;
Perfect and working fix for a subtle bug :)
Thanks,
Vaidy
More information about the Skiboot
mailing list