Re: [PATCH 1/4] hwmon: (adm1026) Use DIV_ROUND_CLOSEST to simplify implementation for SCALE

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, 19 Jul 2014 08:27:26 -0700, Guenter Roeck wrote:
> On 07/19/2014 07:57 AM, Axel Lin wrote:
> > 2014-07-19 22:49 GMT+08:00 Guenter Roeck <linux@xxxxxxxxxxxx>:
> >> On 07/18/2014 08:37 PM, Axel Lin wrote:
> >>>
> >>> Signed-off-by: Axel Lin <axel.lin@xxxxxxxxxx>
> >>> ---
> >>>    drivers/hwmon/adm1026.c | 2 +-
> >>>    1 file changed, 1 insertion(+), 1 deletion(-)
> >>>
> >>> diff --git a/drivers/hwmon/adm1026.c b/drivers/hwmon/adm1026.c
> >>> index ca8430f..c632e46 100644
> >>> --- a/drivers/hwmon/adm1026.c
> >>> +++ b/drivers/hwmon/adm1026.c
> >>> @@ -196,7 +196,7 @@ static int adm1026_scaling[] = { /* .001 Volts */
> >>>                  3330, 4995, 2250, 12000, 13875
> >>>          };
> >>>    #define NEG12_OFFSET  16000
> >>> -#define SCALE(val, from, to) (((val)*(to) + ((from)/2))/(from))
> >>> +#define SCALE(val, from, to) DIV_ROUND_CLOSEST((val) * (to), (from))
> >>>    #define INS_TO_REG(n, val)  (clamp_val(SCALE(val, adm1026_scaling[n],
> >>> 192),\
> >>>          0, 255))
> >>>    #define INS_FROM_REG(n, val) (SCALE(val, 192, adm1026_scaling[n]))
> >>>
> >> Hi Axel,
> >>
> >> I don't really see the value in this series. It does not really improve
> >> anything,
> >> or make the code smaller.
> >
> > Though there is nothing wrong in original code.
> > IMHO, I think use DIV_ROUND_CLOSEST is less error prone than having
> > the similar calculation in various drivers.
> 
> That is more applicable to the SCALE macro or function itself, though.
> 
> For example, if you look into adm9240.c, you'll notice that SCALE returns
> an int but gets a long as argument. This is asking for overflows. Also,
> it is called prior to calling clamp_val, which again invites overflow errors.
> Sure, those are corner cases, and especially the clamp_val problem would
> be difficult to address, but getting rid of SCALE entirely would at least
> address the long->int overflow problem. Your patch doesn't do that.
> 
> In other cases, SCALE uses a multiplication factor of 1, which means it is
> really unnecessary and could be replaced directly with DIV_ROUND_CLOSEST.

This was exactly my thought when looking at this series.

> In other words, I'd be more inclined to accept patches which get rid of
> the SCALE macro or function entirely.

I really have no opinion about this, sorry.

-- 
Jean Delvare
SUSE L3 Support

_______________________________________________
lm-sensors mailing list
lm-sensors@xxxxxxxxxxxxxx
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors




[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux