Message ID | 20241204013620.862943-4-andriy.shevchenko@linux.intel.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | iio: afe: rescale: A few cleanups | expand |
Hi Andy, kernel test robot noticed the following build errors: [auto build test ERROR on jic23-iio/togreg] [also build test ERROR on linus/master v6.13-rc1 next-20241203] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Andy-Shevchenko/iio-afe-rescale-Don-t-use-for-booleans/20241204-124353 base: https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg patch link: https://lore.kernel.org/r/20241204013620.862943-4-andriy.shevchenko%40linux.intel.com patch subject: [PATCH v1 3/4] iio: afe: rescale: Re-use generic struct s32_fract config: arm64-randconfig-001 (https://download.01.org/0day-ci/archive/20241204/202412041825.tYQkmq7d-lkp@intel.com/config) compiler: aarch64-linux-gcc (GCC) 14.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241204/202412041825.tYQkmq7d-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202412041825.tYQkmq7d-lkp@intel.com/ All errors (new ones prefixed by >>): drivers/iio/test/iio-test-rescale.c: In function 'iio_rescale_test_scale': >> drivers/iio/test/iio-test-rescale.c:655:16: error: 'struct rescale' has no member named 'numerator' 655 | rescale.numerator = t->numerator; | ^ >> drivers/iio/test/iio-test-rescale.c:656:16: error: 'struct rescale' has no member named 'denominator' 656 | rescale.denominator = t->denominator; | ^ drivers/iio/test/iio-test-rescale.c: In function 'iio_rescale_test_offset': drivers/iio/test/iio-test-rescale.c:684:16: error: 'struct rescale' has no member named 'numerator' 684 | rescale.numerator = t->numerator; | ^ drivers/iio/test/iio-test-rescale.c:685:16: error: 'struct rescale' has no member named 'denominator' 685 | rescale.denominator = t->denominator; | ^ vim +655 drivers/iio/test/iio-test-rescale.c 8e74a48d17d509b Liam Beguin 2022-02-12 645 8e74a48d17d509b Liam Beguin 2022-02-12 646 static void iio_rescale_test_scale(struct kunit *test) 8e74a48d17d509b Liam Beguin 2022-02-12 647 { 8e74a48d17d509b Liam Beguin 2022-02-12 648 struct rescale_tc_data *t = (struct rescale_tc_data *)test->param_value; 8e74a48d17d509b Liam Beguin 2022-02-12 649 char *buff = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL); 8e74a48d17d509b Liam Beguin 2022-02-12 650 struct rescale rescale; 8e74a48d17d509b Liam Beguin 2022-02-12 651 int values[2]; 8e74a48d17d509b Liam Beguin 2022-02-12 652 int rel_ppm; 8e74a48d17d509b Liam Beguin 2022-02-12 653 int ret; 8e74a48d17d509b Liam Beguin 2022-02-12 654 8e74a48d17d509b Liam Beguin 2022-02-12 @655 rescale.numerator = t->numerator; 8e74a48d17d509b Liam Beguin 2022-02-12 @656 rescale.denominator = t->denominator; 8e74a48d17d509b Liam Beguin 2022-02-12 657 rescale.offset = t->offset; 8e74a48d17d509b Liam Beguin 2022-02-12 658 values[0] = t->schan_val; 8e74a48d17d509b Liam Beguin 2022-02-12 659 values[1] = t->schan_val2; 8e74a48d17d509b Liam Beguin 2022-02-12 660 8e74a48d17d509b Liam Beguin 2022-02-12 661 ret = rescale_process_scale(&rescale, t->schan_scale_type, 8e74a48d17d509b Liam Beguin 2022-02-12 662 &values[0], &values[1]); 8e74a48d17d509b Liam Beguin 2022-02-12 663 8e74a48d17d509b Liam Beguin 2022-02-12 664 ret = iio_format_value(buff, ret, 2, values); 8e74a48d17d509b Liam Beguin 2022-02-12 665 KUNIT_EXPECT_EQ(test, (int)strlen(buff), ret); 8e74a48d17d509b Liam Beguin 2022-02-12 666 8e74a48d17d509b Liam Beguin 2022-02-12 667 rel_ppm = iio_test_relative_error_ppm(buff, t->expected); 8e74a48d17d509b Liam Beguin 2022-02-12 668 KUNIT_EXPECT_GE_MSG(test, rel_ppm, 0, "failed to compute ppm\n"); 8e74a48d17d509b Liam Beguin 2022-02-12 669 8e74a48d17d509b Liam Beguin 2022-02-12 670 KUNIT_EXPECT_EQ_MSG(test, rel_ppm, 0, 8e74a48d17d509b Liam Beguin 2022-02-12 671 "\t real=%s" 8e74a48d17d509b Liam Beguin 2022-02-12 672 "\texpected=%s\n", 8e74a48d17d509b Liam Beguin 2022-02-12 673 buff, t->expected); 8e74a48d17d509b Liam Beguin 2022-02-12 674 } 8e74a48d17d509b Liam Beguin 2022-02-12 675
Hi Andy, kernel test robot noticed the following build errors: [auto build test ERROR on jic23-iio/togreg] [also build test ERROR on linus/master v6.13-rc1 next-20241203] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Andy-Shevchenko/iio-afe-rescale-Don-t-use-for-booleans/20241204-124353 base: https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg patch link: https://lore.kernel.org/r/20241204013620.862943-4-andriy.shevchenko%40linux.intel.com patch subject: [PATCH v1 3/4] iio: afe: rescale: Re-use generic struct s32_fract config: arm-randconfig-003 (https://download.01.org/0day-ci/archive/20241204/202412041908.UaZf89I0-lkp@intel.com/config) compiler: clang version 20.0.0git (https://github.com/llvm/llvm-project 592c0fe55f6d9a811028b5f3507be91458ab2713) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241204/202412041908.UaZf89I0-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202412041908.UaZf89I0-lkp@intel.com/ All errors (new ones prefixed by >>): >> drivers/iio/test/iio-test-rescale.c:655:10: error: no member named 'numerator' in 'struct rescale' 655 | rescale.numerator = t->numerator; | ~~~~~~~ ^ >> drivers/iio/test/iio-test-rescale.c:656:10: error: no member named 'denominator' in 'struct rescale' 656 | rescale.denominator = t->denominator; | ~~~~~~~ ^ drivers/iio/test/iio-test-rescale.c:684:10: error: no member named 'numerator' in 'struct rescale' 684 | rescale.numerator = t->numerator; | ~~~~~~~ ^ drivers/iio/test/iio-test-rescale.c:685:10: error: no member named 'denominator' in 'struct rescale' 685 | rescale.denominator = t->denominator; | ~~~~~~~ ^ 4 errors generated. vim +655 drivers/iio/test/iio-test-rescale.c 8e74a48d17d509 Liam Beguin 2022-02-12 645 8e74a48d17d509 Liam Beguin 2022-02-12 646 static void iio_rescale_test_scale(struct kunit *test) 8e74a48d17d509 Liam Beguin 2022-02-12 647 { 8e74a48d17d509 Liam Beguin 2022-02-12 648 struct rescale_tc_data *t = (struct rescale_tc_data *)test->param_value; 8e74a48d17d509 Liam Beguin 2022-02-12 649 char *buff = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL); 8e74a48d17d509 Liam Beguin 2022-02-12 650 struct rescale rescale; 8e74a48d17d509 Liam Beguin 2022-02-12 651 int values[2]; 8e74a48d17d509 Liam Beguin 2022-02-12 652 int rel_ppm; 8e74a48d17d509 Liam Beguin 2022-02-12 653 int ret; 8e74a48d17d509 Liam Beguin 2022-02-12 654 8e74a48d17d509 Liam Beguin 2022-02-12 @655 rescale.numerator = t->numerator; 8e74a48d17d509 Liam Beguin 2022-02-12 @656 rescale.denominator = t->denominator; 8e74a48d17d509 Liam Beguin 2022-02-12 657 rescale.offset = t->offset; 8e74a48d17d509 Liam Beguin 2022-02-12 658 values[0] = t->schan_val; 8e74a48d17d509 Liam Beguin 2022-02-12 659 values[1] = t->schan_val2; 8e74a48d17d509 Liam Beguin 2022-02-12 660 8e74a48d17d509 Liam Beguin 2022-02-12 661 ret = rescale_process_scale(&rescale, t->schan_scale_type, 8e74a48d17d509 Liam Beguin 2022-02-12 662 &values[0], &values[1]); 8e74a48d17d509 Liam Beguin 2022-02-12 663 8e74a48d17d509 Liam Beguin 2022-02-12 664 ret = iio_format_value(buff, ret, 2, values); 8e74a48d17d509 Liam Beguin 2022-02-12 665 KUNIT_EXPECT_EQ(test, (int)strlen(buff), ret); 8e74a48d17d509 Liam Beguin 2022-02-12 666 8e74a48d17d509 Liam Beguin 2022-02-12 667 rel_ppm = iio_test_relative_error_ppm(buff, t->expected); 8e74a48d17d509 Liam Beguin 2022-02-12 668 KUNIT_EXPECT_GE_MSG(test, rel_ppm, 0, "failed to compute ppm\n"); 8e74a48d17d509 Liam Beguin 2022-02-12 669 8e74a48d17d509 Liam Beguin 2022-02-12 670 KUNIT_EXPECT_EQ_MSG(test, rel_ppm, 0, 8e74a48d17d509 Liam Beguin 2022-02-12 671 "\t real=%s" 8e74a48d17d509 Liam Beguin 2022-02-12 672 "\texpected=%s\n", 8e74a48d17d509 Liam Beguin 2022-02-12 673 buff, t->expected); 8e74a48d17d509 Liam Beguin 2022-02-12 674 } 8e74a48d17d509 Liam Beguin 2022-02-12 675
diff --git a/drivers/iio/afe/iio-rescale.c b/drivers/iio/afe/iio-rescale.c index 9d33e7aabe4d..bbc73798082d 100644 --- a/drivers/iio/afe/iio-rescale.c +++ b/drivers/iio/afe/iio-rescale.c @@ -23,6 +23,7 @@ int rescale_process_scale(struct rescale *rescale, int scale_type, int *val, int *val2) { + struct s32_fract *fract = &rescale->fract; s64 tmp; int _val, _val2; s32 rem, rem2; @@ -31,10 +32,10 @@ int rescale_process_scale(struct rescale *rescale, int scale_type, switch (scale_type) { case IIO_VAL_INT: - *val *= rescale->numerator; - if (rescale->denominator == 1) + *val *= fract->numerator; + if (fract->denominator == 1) return scale_type; - *val2 = rescale->denominator; + *val2 = fract->denominator; return IIO_VAL_FRACTIONAL; case IIO_VAL_FRACTIONAL: /* @@ -42,8 +43,8 @@ int rescale_process_scale(struct rescale *rescale, int scale_type, * potential accuracy loss (for in kernel consumers) by * keeping a fractional representation. */ - if (!check_mul_overflow(*val, rescale->numerator, &_val) && - !check_mul_overflow(*val2, rescale->denominator, &_val2)) { + if (!check_mul_overflow(*val, fract->numerator, &_val) && + !check_mul_overflow(*val2, fract->denominator, &_val2)) { *val = _val; *val2 = _val2; return IIO_VAL_FRACTIONAL; @@ -51,8 +52,8 @@ int rescale_process_scale(struct rescale *rescale, int scale_type, fallthrough; case IIO_VAL_FRACTIONAL_LOG2: tmp = (s64)*val * 1000000000LL; - tmp = div_s64(tmp, rescale->denominator); - tmp *= rescale->numerator; + tmp = div_s64(tmp, fract->denominator); + tmp *= fract->numerator; tmp = div_s64_rem(tmp, 1000000000LL, &rem); *val = tmp; @@ -84,11 +85,11 @@ int rescale_process_scale(struct rescale *rescale, int scale_type, */ neg = *val < 0 || *val2 < 0; - tmp = (s64)abs(*val) * abs(rescale->numerator); - *val = div_s64_rem(tmp, abs(rescale->denominator), &rem); + tmp = (s64)abs(*val) * abs(fract->numerator); + *val = div_s64_rem(tmp, abs(fract->denominator), &rem); - tmp = (s64)rem * mult + (s64)abs(*val2) * abs(rescale->numerator); - tmp = div_s64(tmp, abs(rescale->denominator)); + tmp = (s64)rem * mult + (s64)abs(*val2) * abs(fract->numerator); + tmp = div_s64(tmp, abs(fract->denominator)); *val += div_s64_rem(tmp, mult, val2); @@ -96,7 +97,7 @@ int rescale_process_scale(struct rescale *rescale, int scale_type, * If only one of the rescaler elements or the schan scale is * negative, the combined scale is negative. */ - if (neg != (rescale->numerator < 0 || rescale->denominator < 0)) { + if (neg != (fract->numerator < 0 || fract->denominator < 0)) { if (*val) *val = -*val; else @@ -323,6 +324,7 @@ static int rescale_configure_channel(struct device *dev, static int rescale_current_sense_amplifier_props(struct device *dev, struct rescale *rescale) { + struct s32_fract *fract = &rescale->fract; u32 sense; u32 gain_mult = 1; u32 gain_div = 1; @@ -345,16 +347,16 @@ static int rescale_current_sense_amplifier_props(struct device *dev, * numerator/denominator from overflowing. */ factor = gcd(sense, 1000000); - rescale->numerator = 1000000 / factor; - rescale->denominator = sense / factor; + fract->numerator = 1000000 / factor; + fract->denominator = sense / factor; - factor = gcd(rescale->numerator, gain_mult); - rescale->numerator /= factor; - rescale->denominator *= gain_mult / factor; + factor = gcd(fract->numerator, gain_mult); + fract->numerator /= factor; + fract->denominator *= gain_mult / factor; - factor = gcd(rescale->denominator, gain_div); - rescale->numerator *= gain_div / factor; - rescale->denominator /= factor; + factor = gcd(fract->denominator, gain_div); + fract->numerator *= gain_div / factor; + fract->denominator /= factor; return 0; } @@ -362,6 +364,7 @@ static int rescale_current_sense_amplifier_props(struct device *dev, static int rescale_current_sense_shunt_props(struct device *dev, struct rescale *rescale) { + struct s32_fract *fract = &rescale->fract; u32 shunt; u32 factor; int ret; @@ -374,8 +377,8 @@ static int rescale_current_sense_shunt_props(struct device *dev, } factor = gcd(shunt, 1000000); - rescale->numerator = 1000000 / factor; - rescale->denominator = shunt / factor; + fract->numerator = 1000000 / factor; + fract->denominator = shunt / factor; return 0; } @@ -383,26 +386,25 @@ static int rescale_current_sense_shunt_props(struct device *dev, static int rescale_voltage_divider_props(struct device *dev, struct rescale *rescale) { + struct s32_fract *fract = &rescale->fract; int ret; u32 factor; - ret = device_property_read_u32(dev, "output-ohms", - &rescale->denominator); + ret = device_property_read_u32(dev, "output-ohms", &fract->denominator); if (ret) { dev_err(dev, "failed to read output-ohms: %d\n", ret); return ret; } - ret = device_property_read_u32(dev, "full-ohms", - &rescale->numerator); + ret = device_property_read_u32(dev, "full-ohms", &fract->numerator); if (ret) { dev_err(dev, "failed to read full-ohms: %d\n", ret); return ret; } - factor = gcd(rescale->numerator, rescale->denominator); - rescale->numerator /= factor; - rescale->denominator /= factor; + factor = gcd(fract->numerator, fract->denominator); + fract->numerator /= factor; + fract->denominator /= factor; return 0; } @@ -410,6 +412,7 @@ static int rescale_voltage_divider_props(struct device *dev, static int rescale_temp_sense_rtd_props(struct device *dev, struct rescale *rescale) { + struct s32_fract *fract = &rescale->fract; u32 factor; u32 alpha; u32 iexc; @@ -440,8 +443,8 @@ static int rescale_temp_sense_rtd_props(struct device *dev, tmp = r0 * iexc * alpha / 1000000; factor = gcd(tmp, 1000000); - rescale->numerator = 1000000 / factor; - rescale->denominator = tmp / factor; + fract->numerator = 1000000 / factor; + fract->denominator = tmp / factor; rescale->offset = -1 * ((r0 * iexc) / 1000); @@ -451,6 +454,7 @@ static int rescale_temp_sense_rtd_props(struct device *dev, static int rescale_temp_transducer_props(struct device *dev, struct rescale *rescale) { + struct s32_fract *fract = &rescale->fract; s32 offset = 0; s32 sense = 1; s32 alpha; @@ -464,11 +468,10 @@ static int rescale_temp_transducer_props(struct device *dev, return ret; } - rescale->numerator = 1000000; - rescale->denominator = alpha * sense; + fract->numerator = 1000000; + fract->denominator = alpha * sense; - rescale->offset = div_s64((s64)offset * rescale->denominator, - rescale->numerator); + rescale->offset = div_s64((s64)offset * fract->denominator, fract->numerator); return 0; } @@ -550,15 +553,15 @@ static int rescale_probe(struct platform_device *pdev) rescale = iio_priv(indio_dev); rescale->cfg = device_get_match_data(dev); - rescale->numerator = 1; - rescale->denominator = 1; + rescale->fract.numerator = 1; + rescale->fract.denominator = 1; rescale->offset = 0; ret = rescale->cfg->props(dev, rescale); if (ret) return ret; - if (!rescale->numerator || !rescale->denominator) { + if (!rescale->fract.numerator || !rescale->fract.denominator) { dev_err(dev, "invalid scaling factor.\n"); return -EINVAL; } diff --git a/include/linux/iio/afe/rescale.h b/include/linux/iio/afe/rescale.h index 6eecb435488f..d6998806b4f5 100644 --- a/include/linux/iio/afe/rescale.h +++ b/include/linux/iio/afe/rescale.h @@ -6,7 +6,9 @@ #ifndef __IIO_RESCALE_H__ #define __IIO_RESCALE_H__ +#include <linux/math.h> #include <linux/types.h> + #include <linux/iio/iio.h> struct device; @@ -19,12 +21,11 @@ struct rescale_cfg { struct rescale { const struct rescale_cfg *cfg; + struct s32_fract fract; struct iio_channel *source; struct iio_chan_spec chan; struct iio_chan_spec_ext_info *ext_info; bool chan_processed; - s32 numerator; - s32 denominator; s32 offset; };
Instead of custom data type re-use generic struct s32_fract. No changes intended. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> --- drivers/iio/afe/iio-rescale.c | 79 +++++++++++++++++---------------- include/linux/iio/afe/rescale.h | 5 ++- 2 files changed, 44 insertions(+), 40 deletions(-)