Received: by 10.223.176.5 with SMTP id f5csp978980wra; Fri, 2 Feb 2018 09:10:26 -0800 (PST) X-Google-Smtp-Source: AH8x22593cjVXQVKbgg4e0Nl529+2M3SgXRNpBaxkxpTPBs07ACoLkRL9W+lrCw9Ib76M0qjffQG X-Received: by 10.99.151.2 with SMTP id n2mr28932127pge.87.1517591426728; Fri, 02 Feb 2018 09:10:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517591426; cv=none; d=google.com; s=arc-20160816; b=sRDyTTvsrne/2kZ9vc1NiCW3U3Lzq7bYO/TmPUePbJhmJ0y8Rhj3hpxBIyJ3fv2RHc 4a3lOc47BGIw8Kd27Pwn0zSY1FV9yuAoOiosxQVb94P512eZAf0YqDkuN3UZGD9RM/Bb TFb/leBCyt3nLMyvX92cHApD8d/XZl5FT6fiv2yCltMlejhQCEVDVwAS5gQc3wA6vPGp RhpvDsNirntVqSDeFbyP8JpT/9dwehvkpu4oDaaUVbQK8ABmDHoIXhiFmV4eHtJSGswB X4EDT5XkZJzjsW5MMzhc0REKAZVboARYK2khUNvzP404SQA86FlnckGNT5m5aoFXthm+ dpHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=CT5LO0hbIildTZiuokrclQ4m8K5fbwvx9FX4OHw3RTM=; b=sw/IDfEtguWk/CaWdkkccoIuAooqkSUmGakdVDs3IAJ6rBVxWIKhrEr9IKGSfN/u+M egYR1F4fTP9LLNKIYQ27rZNdv7RCAXwATRtQPOSe6kcnLxJHiq+NWQwv6zCg489sYy8q 2P5DPPttOaZ0fMzu44MeUdXgK6DSFBWOU8uWSQu/Sn849f9xratR/VPYJEp5xtFIPbZp itGgLRLTRXeZw45xqXvEAFNZI+ov4yuJfXYGU6fw5iOc/hvnnkKWEzP99NXkRmRuijPL C5tr6meHCPf+TdsBWMnrMlR+e+s782AhsthQ7jwtr8/pJXXcxGkMQq+2v08JsX90qvCv 89EA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j10si2138031pfe.133.2018.02.02.09.10.11; Fri, 02 Feb 2018 09:10:26 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752633AbeBBRIc (ORCPT + 99 others); Fri, 2 Feb 2018 12:08:32 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:36298 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752519AbeBBREr (ORCPT ); Fri, 2 Feb 2018 12:04:47 -0500 Received: from localhost (LFbn-1-12258-90.w90-92.abo.wanadoo.fr [90.92.71.90]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 2C127DC9; Fri, 2 Feb 2018 17:04:46 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Robert Lippert , Guenter Roeck , Sasha Levin Subject: [PATCH 4.9 46/86] hwmon: (pmbus) Use 64bit math for DIRECT format values Date: Fri, 2 Feb 2018 17:58:06 +0100 Message-Id: <20180202140826.535387677@linuxfoundation.org> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180202140822.679101338@linuxfoundation.org> References: <20180202140822.679101338@linuxfoundation.org> User-Agent: quilt/0.65 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ From: Robert Lippert [ Upstream commit bd467e4eababe4c04272c1e646f066db02734c79 ] Power values in the 100s of watt range can easily blow past 32bit math limits when processing everything in microwatts. Use 64bit math instead to avoid these issues on common 32bit ARM BMC platforms. Fixes: 442aba78728e ("hwmon: PMBus device driver") Signed-off-by: Robert Lippert Signed-off-by: Guenter Roeck Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/hwmon/pmbus/pmbus_core.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) --- a/drivers/hwmon/pmbus/pmbus_core.c +++ b/drivers/hwmon/pmbus/pmbus_core.c @@ -20,6 +20,7 @@ */ #include +#include #include #include #include @@ -476,8 +477,8 @@ static long pmbus_reg2data_linear(struct static long pmbus_reg2data_direct(struct pmbus_data *data, struct pmbus_sensor *sensor) { - long val = (s16) sensor->data; - long m, b, R; + s64 b, val = (s16)sensor->data; + s32 m, R; m = data->info->m[sensor->class]; b = data->info->b[sensor->class]; @@ -505,11 +506,12 @@ static long pmbus_reg2data_direct(struct R--; } while (R < 0) { - val = DIV_ROUND_CLOSEST(val, 10); + val = div_s64(val + 5LL, 10L); /* round closest */ R++; } - return (val - b) / m; + val = div_s64(val - b, m); + return clamp_val(val, LONG_MIN, LONG_MAX); } /* @@ -629,7 +631,8 @@ static u16 pmbus_data2reg_linear(struct static u16 pmbus_data2reg_direct(struct pmbus_data *data, struct pmbus_sensor *sensor, long val) { - long m, b, R; + s64 b, val64 = val; + s32 m, R; m = data->info->m[sensor->class]; b = data->info->b[sensor->class]; @@ -646,18 +649,18 @@ static u16 pmbus_data2reg_direct(struct R -= 3; /* Adjust R and b for data in milli-units */ b *= 1000; } - val = val * m + b; + val64 = val64 * m + b; while (R > 0) { - val *= 10; + val64 *= 10; R--; } while (R < 0) { - val = DIV_ROUND_CLOSEST(val, 10); + val64 = div_s64(val64 + 5LL, 10L); /* round closest */ R++; } - return val; + return (u16)clamp_val(val64, S16_MIN, S16_MAX); } static u16 pmbus_data2reg_vid(struct pmbus_data *data,