From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-1088053-1520239634-2-11149716006242062152 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.249, RCVD_IN_DNSWL_HI -5, T_RP_MATCHES_RCVD -0.01, LANGUAGES en, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='209.132.180.67', Host='vger.kernel.org', Country='CN', FromHeader='org', MailFrom='org' X-Spam-charsets: plain='UTF-8' X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: stable-owner@vger.kernel.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=arctest; t=1520239633; b=F+1J+KEV4e5bXTkyr4irK+T6466bE8ZlmatSTuA+q5385a8 EMIZiuoHh2K+4t6dgc940vy7S6mnC4bGw4lsvTFkEPoXif8Ubm5cGUC2dtLzVGbV KyhLyca8RGu7b2Rgmfcv+ngHnQtOxpfYlEzX23oUgUEKcgTTC85juoNDRDnsncyM OK3xPLHh4s1qN63T87B1wtgbzT+AXro6rN11tIBE9ZBhA13lRSX6/YJJJlOLr9UZ xMf703Lo/R046lHyfBueVzBaMAGpm7qAv5IaYyxy5ylY86YxBw3y/gCC31EKckdg /JZfC6P/ffUgRCuxIz/8kLGvfcjoAO69yiDOgLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=mime-version:in-reply-to:references:from :date:message-id:subject:to:cc:content-type:sender:list-id; s= arctest; t=1520239633; bh=09qa1dlQyHYOubsApxhvfpqKXe54WBOYr62wSb 3GNI8=; b=NPWlse4fkdxLPWRDZBctPTm7F9Bo8369X1JwrjIq5HXanTDL+Tw1cv +bDu2jEva9gfG2R5TYd+E3FMNfkffkaznSDazU3OTq5OH0Cb7P+iOKI2K0z6W9Ct VoOF+h0HzUhZTqNhchpBPvfR+LzjQ4Z+2GmDIKzg2pYRBjiMf8S9n3waskdRUT1G XNznwI/XGXMnCahtIlOMA63cJ7nhPfPanz2MCs17CazlGnCc1ED/iUqzuFpDkNmz 718FQ/gfzq0MiCmJ1K4HAoFArYMjEs0c9nmB32xYQnbhT0DIijM1Ve1GqHFsYe2X Shn5UUOjgGtv7YbebARhQpbKu3f1yZDA== ARC-Authentication-Results: i=1; mx2.messagingengine.com; arc=none (no signatures found); dkim=pass (1024-bit rsa key sha256) header.d=linaro.org header.i=@linaro.org header.b=KtQ8T27p x-bits=1024 x-keytype=rsa x-algorithm=sha256 x-selector=google; dmarc=pass (p=none,has-list-id=yes,d=none) header.from=linaro.org; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=stable-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-category=clean score=-100 state=0; x-google-dkim=pass (2048-bit rsa key) header.d=1e100.net header.i=@1e100.net header.b=Y6DUvq2N; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=linaro.org header.result=pass header_is_org_domain=yes Authentication-Results: mx2.messagingengine.com; arc=none (no signatures found); dkim=pass (1024-bit rsa key sha256) header.d=linaro.org header.i=@linaro.org header.b=KtQ8T27p x-bits=1024 x-keytype=rsa x-algorithm=sha256 x-selector=google; dmarc=pass (p=none,has-list-id=yes,d=none) header.from=linaro.org; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=stable-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-category=clean score=-100 state=0; x-google-dkim=pass (2048-bit rsa key) header.d=1e100.net header.i=@1e100.net header.b=Y6DUvq2N; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=linaro.org header.result=pass header_is_org_domain=yes Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933236AbeCEIqZ (ORCPT ); Mon, 5 Mar 2018 03:46:25 -0500 Received: from mail-io0-f195.google.com ([209.85.223.195]:34590 "EHLO mail-io0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933294AbeCEIqL (ORCPT ); Mon, 5 Mar 2018 03:46:11 -0500 X-Google-Smtp-Source: AG47ELt2OYIRQAS+IBULi50M7oyYbN3/bhqwdPTwUavVpFdPGXpvHNGweoAaaLot0cDEURJrJPVsjefoLPjE+5vIDvk= MIME-Version: 1.0 In-Reply-To: <20180228115318.20154-1-Evgeniy.Didin@synopsys.com> References: <20180228115318.20154-1-Evgeniy.Didin@synopsys.com> From: Ulf Hansson Date: Mon, 5 Mar 2018 09:46:09 +0100 Message-ID: Subject: Re: [PATCH v4] mmc: dw_mmc: Fix the DTO/CTO timeout overflow calculation for 32-bit systems To: Evgeniy Didin Cc: "linux-mmc@vger.kernel.org" , Alexey Brodkin , Eugeniy Paltsev , Douglas Anderson , Andy Shevchenko , Jisheng Zhang , Shawn Lin , Vineet Gupta , Linux Kernel Mailing List , linux-snps-arc@lists.infradead.org, "# 4.0+" Content-Type: text/plain; charset="UTF-8" Sender: stable-owner@vger.kernel.org X-Mailing-List: stable@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: On 28 February 2018 at 12:53, Evgeniy Didin wrote: > In commit 9d9491a7da2a ("mmc: dw_mmc: Fix the DTO timeout calculation") and > commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") > have been 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 which prevents overflow. > > Tested-by: Vineet Gupta > Reported-by: Vineet Gupta # ARC STAR 9001306872 HSDK, sdio: board crashes when copying big files > Fixes: 9d9491a7da2a ("mmc: dw_mmc: Fix the DTO timeout calculation") > Fixes: 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") > > Signed-off-by: Evgeniy Didin > > CC: Alexey Brodkin > CC: Eugeniy Paltsev > CC: Douglas Anderson > CC: Ulf Hansson > CC: Andy Shevchenko > CC: Jisheng Zhang > CC: Shawn Lin > CC: Vineet Gupta > CC: linux-kernel@vger.kernel.org > CC: linux-snps-arc@lists.infradead.org > Cc: Thanks, applied for fixes! I took the liberty to remove this cc-list and did some additional minor cleanups of the change log. Kind regards Uffe > --- > Changes since v3: > -Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL > -Make one patch from two patches > -Modify commit message > > Changes sinve v2: > -add fix for cto_ms > > Changes since v1: > -uint64_t switched to u64 > > drivers/mmc/host/dw_mmc.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c > index 0aa39975f33b..cba534d4c81b 100644 > --- a/drivers/mmc/host/dw_mmc.c > +++ b/drivers/mmc/host/dw_mmc.c > @@ -409,7 +409,9 @@ static inline void dw_mci_set_cto(struct dw_mci *host) > 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; > @@ -1944,8 +1946,9 @@ static void dw_mci_set_drto(struct dw_mci *host) > 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; > -- > 2.11.0 >