lkml.org 
[lkml]   [2022]   [Sep]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.19 173/192] hwmon: (mr75203) fix VM sensor allocation when "intel,vm-map" not defined
    Date
    From: Eliav Farber <farbere@amazon.com>

    [ Upstream commit 81114fc3d27bf5b06b2137d2fd2b63da656a8b90 ]

    Bug - in case "intel,vm-map" is missing in device-tree ,'num' is set
    to 0, and no voltage channel infos are allocated.

    The reason num is set to 0 when "intel,vm-map" is missing is to set the
    entire pvt->vm_idx[] with incremental channel numbers, but it didn't
    take into consideration that same num is used later in devm_kcalloc().

    If "intel,vm-map" does exist there is no need to set the unspecified
    channels with incremental numbers, because the unspecified channels
    can't be accessed in pvt_read_in() which is the only other place besides
    the probe functions that uses pvt->vm_idx[].

    This change fixes the bug by moving the incremental channel numbers
    setting to be done only if "intel,vm-map" property is defined (starting
    loop from 0), and removing 'num = 0'.

    Fixes: 9d823351a337 ("hwmon: Add hardware monitoring driver for Moortec MR75203 PVT controller")
    Signed-off-by: Eliav Farber <farbere@amazon.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20220908152449.35457-3-farbere@amazon.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/hwmon/mr75203.c | 14 ++++++--------
    1 file changed, 6 insertions(+), 8 deletions(-)

    diff --git a/drivers/hwmon/mr75203.c b/drivers/hwmon/mr75203.c
    index 26278b0f17a98..8b72e8fe34c1b 100644
    --- a/drivers/hwmon/mr75203.c
    +++ b/drivers/hwmon/mr75203.c
    @@ -584,7 +584,12 @@ static int mr75203_probe(struct platform_device *pdev)
    ret = device_property_read_u8_array(dev, "intel,vm-map",
    pvt->vm_idx, vm_num);
    if (ret) {
    - num = 0;
    + /*
    + * Incase intel,vm-map property is not defined, we
    + * assume incremental channel numbers.
    + */
    + for (i = 0; i < vm_num; i++)
    + pvt->vm_idx[i] = i;
    } else {
    for (i = 0; i < vm_num; i++)
    if (pvt->vm_idx[i] >= vm_num ||
    @@ -594,13 +599,6 @@ static int mr75203_probe(struct platform_device *pdev)
    }
    }

    - /*
    - * Incase intel,vm-map property is not defined, we assume
    - * incremental channel numbers.
    - */
    - for (i = num; i < vm_num; i++)
    - pvt->vm_idx[i] = i;
    -
    in_config = devm_kcalloc(dev, num + 1,
    sizeof(*in_config), GFP_KERNEL);
    if (!in_config)
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-09-13 16:30    [W:3.663 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site