iio: adc: Use devm_krealloc_array
authorJames Clark <james.clark@arm.com>
Tue, 9 May 2023 09:49:40 +0000 (10:49 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 30 May 2023 20:07:15 +0000 (21:07 +0100)
Now that it exists, use it instead of doing the multiplication and
checking for overflow manually.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: James Clark <james.clark@arm.com>
Link: https://lore.kernel.org/r/20230509094942.396150-4-james.clark@arm.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/iio/adc/xilinx-ams.c
drivers/iio/adc/xilinx-xadc-core.c

index 34cf336..f0b71a1 100644 (file)
@@ -1263,7 +1263,7 @@ static int ams_parse_firmware(struct iio_dev *indio_dev)
        struct device *dev = indio_dev->dev.parent;
        struct fwnode_handle *child = NULL;
        struct fwnode_handle *fwnode = dev_fwnode(dev);
-       size_t ams_size, dev_size;
+       size_t ams_size;
        int ret, ch_cnt = 0, i, rising_off, falling_off;
        unsigned int num_channels = 0;
 
@@ -1320,11 +1320,8 @@ static int ams_parse_firmware(struct iio_dev *indio_dev)
                }
        }
 
-       dev_size = array_size(sizeof(*dev_channels), num_channels);
-       if (dev_size == SIZE_MAX)
-               return -ENOMEM;
-
-       dev_channels = devm_krealloc(dev, ams_channels, dev_size, GFP_KERNEL);
+       dev_channels = devm_krealloc_array(dev, ams_channels, num_channels,
+                                          sizeof(*dev_channels), GFP_KERNEL);
        if (!dev_channels)
                return -ENOMEM;
 
index 292f289..dba7330 100644 (file)
@@ -613,20 +613,17 @@ static int xadc_update_scan_mode(struct iio_dev *indio_dev,
        const unsigned long *mask)
 {
        struct xadc *xadc = iio_priv(indio_dev);
-       size_t new_size, n;
+       size_t n;
        void *data;
 
        n = bitmap_weight(mask, indio_dev->masklength);
 
-       if (check_mul_overflow(n, sizeof(*xadc->data), &new_size))
-               return -ENOMEM;
-
-       data = devm_krealloc(indio_dev->dev.parent, xadc->data,
-                            new_size, GFP_KERNEL);
+       data = devm_krealloc_array(indio_dev->dev.parent, xadc->data,
+                                  n, sizeof(*xadc->data), GFP_KERNEL);
        if (!data)
                return -ENOMEM;
 
-       memset(data, 0, new_size);
+       memset(data, 0, n * sizeof(*xadc->data));
        xadc->data = data;
 
        return 0;
@@ -1281,9 +1278,9 @@ static int xadc_parse_dt(struct iio_dev *indio_dev, unsigned int *conf, int irq)
        }
 
        indio_dev->num_channels = num_channels;
-       indio_dev->channels = devm_krealloc(dev, channels,
-                                           sizeof(*channels) * num_channels,
-                                           GFP_KERNEL);
+       indio_dev->channels = devm_krealloc_array(dev, channels,
+                                                 num_channels, sizeof(*channels),
+                                                 GFP_KERNEL);
        /* If we can't resize the channels array, just use the original */
        if (!indio_dev->channels)
                indio_dev->channels = channels;