Received: by 10.213.65.68 with SMTP id h4csp832535imn; Tue, 27 Mar 2018 09:35:50 -0700 (PDT) X-Google-Smtp-Source: AIpwx49iTp/upsDhyB+ahCLIIOYEfRS2/mO1Tbh/50Nybu8qtrSLJ0BJdCE4DYGereYGCopkSPF2 X-Received: by 2002:a17:902:122:: with SMTP id 31-v6mr49607plb.280.1522168550769; Tue, 27 Mar 2018 09:35:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522168550; cv=none; d=google.com; s=arc-20160816; b=anI5WJx9sv9A7DDEzm+hUmC/vJIUjJKCGge+Ru/z9ic53LPnmbTOswVIJPjZZqiH/G Uo1/PBd6S/YglTwM1vT3CF/2cU09Ta8ZZrJd3jOvpCeindVFhrBNHxOyuIPQrWQ1lywr g0vv01ygvuarH/rlrbe5wAxE/Pl8wZnvrmmDGB2d0aLRuYK6KObKjF/qNSRkmUz/aMdD CX7HiynB/9dN99hGtn/koLDucpUgMfEco99UzeNsbP3/HpcP6iWDtru2mWtsspi+Q/qx zEbVRQ8NS2hkx2wwrw32zKdpbf5s2RLuLk1VWsF9GrC1meOG7WpR/tsceOEdBDu6olH2 xCvg== 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=hr9DYh4+enkL3gL3ygbs5BSO4aZAuiOcCQvVJmvWtzs=; b=gMpF+nk3J4Kem2E+YJBT4PPMP6u/boMo296ayjoD+4UiV9WofO0UOfJ27l6cNoF2W7 pjc4qmIq/NOBGo9eTtASLR8JELJIkFeFdzlQG6pWwWpUlzCciokSD2oQMDyk/K3pvV/m NBFbzvjMMjM2nM7XHSz7J9hgvqEK3EAKz0KC/gUi22MpDmxhf9tvRE9+s88WEFo4Ulp0 bjGU/MYCrp4uHGHO/X6XU4/yVeMnd5YGKrk59ANWR7cV2YOhjQQVwjj7EkXKkxHJ/59j 5r1SdayiVKSS+J6IKz2P5V93qqJ8H47bDBJnkn6xE/9S2jburYeJ31wzplizo6WJC+Xw wpQA== 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 ay10-v6si1686078plb.258.2018.03.27.09.35.36; Tue, 27 Mar 2018 09:35:50 -0700 (PDT) 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 S1751486AbeC0QeU (ORCPT + 99 others); Tue, 27 Mar 2018 12:34:20 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:44276 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754179AbeC0QeR (ORCPT ); Tue, 27 Mar 2018 12:34:17 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 381F411AD; Tue, 27 Mar 2018 16:34:16 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vineet Gupta , Evgeniy Didin , Andy Shevchenko , Douglas Anderson , Shawn Lin , Jisheng Zhang , Jaehoon Chung , Ulf Hansson Subject: [PATCH 4.14 019/101] mmc: dw_mmc: Fix the DTO/CTO timeout overflow calculation for 32-bit systems Date: Tue, 27 Mar 2018 18:26:51 +0200 Message-Id: <20180327162751.150880077@linuxfoundation.org> X-Mailer: git-send-email 2.16.3 In-Reply-To: <20180327162749.993880276@linuxfoundation.org> References: <20180327162749.993880276@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review 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.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Evgeniy Didin commit c7151602255a36ba07c84fe2baeef846fdb988b8 upstream. The commit 9d9491a7da2a ("mmc: dw_mmc: Fix the DTO timeout calculation") and commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") made changes, which cause multiply overflow for 32-bit systems. The broken timeout calculations leads to unexpected ETIMEDOUT errors and causes stacktrace splat (such as below) during normal data exchange with SD-card. | Running : 4M-check-reassembly-tcp-cmykw2-rotatew2.out -v0 -w1 | - Info: Finished target initialization. | mmcblk0: error -110 transferring data, sector 320544, nr 2048, cmd | response 0x900, card status 0x0 DIV_ROUND_UP_ULL helps to escape usage of __udivdi3() from libgcc and so code gets compiled on all 32-bit platforms as opposed to usage of DIV_ROUND_UP when we may only compile stuff on a very few arches. Lets cast this multiply to u64 type to prevent the overflow. Fixes: 9d9491a7da2a ("mmc: dw_mmc: Fix the DTO timeout calculation") Fixes: 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") Tested-by: Vineet Gupta Reported-by: Vineet Gupta # ARC STAR 9001306872 HSDK, sdio: board crashes when copying big files Signed-off-by: Evgeniy Didin Cc: # 4.14 Reviewed-by: Andy Shevchenko Reviewed-by: Douglas Anderson Reviewed-by: Shawn Lin Reviewed-by: Jisheng Zhang Acked-by: Jaehoon Chung Signed-off-by: Ulf Hansson Signed-off-by: Greg Kroah-Hartman --- drivers/mmc/host/dw_mmc.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -413,7 +413,9 @@ static inline void dw_mci_set_cto(struct cto_div = (mci_readl(host, CLKDIV) & 0xff) * 2; if (cto_div == 0) cto_div = 1; - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); + + cto_ms = DIV_ROUND_UP_ULL((u64)MSEC_PER_SEC * cto_clks * cto_div, + host->bus_hz); /* add a bit spare time */ cto_ms += 10; @@ -1947,8 +1949,9 @@ static void dw_mci_set_drto(struct dw_mc drto_div = (mci_readl(host, CLKDIV) & 0xff) * 2; if (drto_div == 0) drto_div = 1; - drto_ms = DIV_ROUND_UP(MSEC_PER_SEC * drto_clks * drto_div, - host->bus_hz); + + drto_ms = DIV_ROUND_UP_ULL((u64)MSEC_PER_SEC * drto_clks * drto_div, + host->bus_hz); /* add a bit spare time */ drto_ms += 10;