* [PATCH 0/2 v3] mmc: dw_mmc: Fix DTO/STO timeout overflow calculation @ 2018-02-26 14:34 ` Evgeniy Didin 0 siblings, 0 replies; 36+ messages in thread From: Evgeniy Didin @ 2018-02-26 14:34 UTC (permalink / raw) To: linux-mmc Cc: Alexey Brodkin, Eugeniy Paltsev, Douglas Anderson, Ulf Hansson, linux-kernel, linux-snps-arc, stable, Vineet Gupta For some 32-bit architectures calculation of DTO and STO timeout can be incorrect due to multiply overflow. Lets prevent this by casting multiply and result to u64. Suggested by Jisheng Zhang. Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable because overflow happens on multiply and DIV_ROUND_UP_ULL helps with sum overflow. --- Changes since v2: -add fix for cto_ms Evgeniy Didin (2): mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit systems mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems drivers/mmc/host/dw_mmc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) -- 2.11.0 ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 0/2 v3] mmc: dw_mmc: Fix DTO/STO timeout overflow calculation @ 2018-02-26 14:34 ` Evgeniy Didin 0 siblings, 0 replies; 36+ messages in thread From: Evgeniy Didin @ 2018-02-26 14:34 UTC (permalink / raw) To: linux-snps-arc For some 32-bit architectures calculation of DTO and STO timeout can be incorrect due to multiply overflow. Lets prevent this by casting multiply and result to u64. Suggested by Jisheng Zhang. Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable because overflow happens on multiply and DIV_ROUND_UP_ULL helps with sum overflow. --- Changes since v2: -add fix for cto_ms Evgeniy Didin (2): mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit systems mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems drivers/mmc/host/dw_mmc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) -- 2.11.0 ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 1/2 v3] mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit systems 2018-02-26 14:34 ` Evgeniy Didin (?) @ 2018-02-26 14:34 ` Evgeniy Didin -1 siblings, 0 replies; 36+ messages in thread From: Evgeniy Didin @ 2018-02-26 14:34 UTC (permalink / raw) To: linux-mmc Cc: Alexey Brodkin, Eugeniy Paltsev, Douglas Anderson, Ulf Hansson, linux-kernel, linux-snps-arc, stable, Vineet Gupta In commit 9d9491a7da2a ("mmc: dw_mmc: Fix the DTO timeout calculation") have been made changes which cause multiply overflow for 32-bit systems. The broken timeout calculations caused false interrupt latency warnings and stacktrace splat (such as below) when accessing the 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 | mmc_host mmc0: Bus speed (slot 0) = 50000000Hz (slot req 400000Hz, actual | 396825HZ div = 63) | mmc_host mmc0: Bus speed (slot 0) = 50000000Hz (slot req 25000000Hz, actual | 25000000HZ div = 1) | ------------[ cut here ]------------ | softirq: huh, entered softirq 6 TASKLET 6f6a9412 with preempt_count 00000101, | exited with 00000100? | WARNING: CPU: 2 PID: 0 at ../lib/scatterlist.c:652 sg_miter_next+0x28/0x20c | Modules linked in: | CPU: 2 PID: 0 Comm: swapper/2 Not tainted 4.15.0 #57 | | Stack Trace: | arc_unwind_core.constprop.1+0xd0/0xf4 | dump_stack+0x68/0x80 | warn_slowpath_null+0x4e/0xec | sg_miter_next+0x28/0x20c | dw_mci_read_data_pio+0x44/0x190 | dw_mmc f000a000.mmc: Unexpected interrupt latency | dw_mci_interrupt+0x3ee/0x530 | __handle_irq_event_percpu+0x56/0x150 | handle_irq_event+0x34/0x78 | handle_level_irq+0x8e/0x120 | generic_handle_irq+0x1c/0x2c | idu_cascade_isr+0x30/0x6c | __handle_domain_irq+0x72/0xc8 | ret_from_exception+0x0/0x8 |---[ end trace 2a58c9af6c25fe51 ]--- Lets cast this multiply to u64 type which prevents overflow. Tested-by: Vineet Gupta <Vineet.Gupta1@synopsys.com> Fixes: ARC STAR 9001306872 HSDK, sdio: board crashes when copying big files Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com> CC: Alexey Brodkin <abrodkin@synopsys.com> CC: Eugeniy Paltsev <paltsev@synopsys.com> CC: Douglas Anderson <dianders@chromium.org> CC: Ulf Hansson <ulf.hansson@linaro.org> CC: linux-kernel@vger.kernel.org CC: linux-snps-arc@lists.infradead.org Cc: <stable@vger.kernel.org> # 9d9491a7da2a mmc: dw_mmc: Fix the DTO timeout calculation --- Nothing changed since v2. drivers/mmc/host/dw_mmc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index 0aa39975f33b..194159219b32 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -1944,7 +1944,8 @@ 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, + + drto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * drto_clks * drto_div, host->bus_hz); /* add a bit spare time */ -- 2.11.0 ^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 1/2 v3] mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit systems @ 2018-02-26 14:34 ` Evgeniy Didin 0 siblings, 0 replies; 36+ messages in thread From: Evgeniy Didin @ 2018-02-26 14:34 UTC (permalink / raw) To: linux-snps-arc In commit 9d9491a7da2a ("mmc: dw_mmc: Fix the DTO timeout calculation") have been made changes which cause multiply overflow for 32-bit systems. The broken timeout calculations caused false interrupt latency warnings and stacktrace splat (such as below) when accessing the 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 | mmc_host mmc0: Bus speed (slot 0) = 50000000Hz (slot req 400000Hz, actual | 396825HZ div = 63) | mmc_host mmc0: Bus speed (slot 0) = 50000000Hz (slot req 25000000Hz, actual | 25000000HZ div = 1) | ------------[ cut here ]------------ | softirq: huh, entered softirq 6 TASKLET 6f6a9412 with preempt_count 00000101, | exited with 00000100? | WARNING: CPU: 2 PID: 0 at ../lib/scatterlist.c:652 sg_miter_next+0x28/0x20c | Modules linked in: | CPU: 2 PID: 0 Comm: swapper/2 Not tainted 4.15.0 #57 | | Stack Trace: | arc_unwind_core.constprop.1+0xd0/0xf4 | dump_stack+0x68/0x80 | warn_slowpath_null+0x4e/0xec | sg_miter_next+0x28/0x20c | dw_mci_read_data_pio+0x44/0x190 | dw_mmc f000a000.mmc: Unexpected interrupt latency | dw_mci_interrupt+0x3ee/0x530 | __handle_irq_event_percpu+0x56/0x150 | handle_irq_event+0x34/0x78 | handle_level_irq+0x8e/0x120 | generic_handle_irq+0x1c/0x2c | idu_cascade_isr+0x30/0x6c | __handle_domain_irq+0x72/0xc8 | ret_from_exception+0x0/0x8 |---[ end trace 2a58c9af6c25fe51 ]--- Lets cast this multiply to u64 type which prevents overflow. Tested-by: Vineet Gupta <Vineet.Gupta1 at synopsys.com> Fixes: ARC STAR 9001306872 HSDK, sdio: board crashes when copying big files Signed-off-by: Evgeniy Didin <Evgeniy.Didin at synopsys.com> CC: Alexey Brodkin <abrodkin at synopsys.com> CC: Eugeniy Paltsev <paltsev at synopsys.com> CC: Douglas Anderson <dianders at chromium.org> CC: Ulf Hansson <ulf.hansson at linaro.org> CC: linux-kernel at vger.kernel.org CC: linux-snps-arc at lists.infradead.org Cc: <stable at vger.kernel.org> # 9d9491a7da2a mmc: dw_mmc: Fix the DTO timeout calculation --- Nothing changed since v2. drivers/mmc/host/dw_mmc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index 0aa39975f33b..194159219b32 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -1944,7 +1944,8 @@ 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, + + drto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * drto_clks * drto_div, host->bus_hz); /* add a bit spare time */ -- 2.11.0 ^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 1/2 v3] mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit systems @ 2018-02-26 14:34 ` Evgeniy Didin 0 siblings, 0 replies; 36+ messages in thread From: Evgeniy Didin @ 2018-02-26 14:34 UTC (permalink / raw) To: linux-mmc Cc: Ulf Hansson, Vineet Gupta, Alexey Brodkin, Douglas Anderson, stable, linux-kernel, linux-snps-arc, Eugeniy Paltsev In commit 9d9491a7da2a ("mmc: dw_mmc: Fix the DTO timeout calculation") have been made changes which cause multiply overflow for 32-bit systems. The broken timeout calculations caused false interrupt latency warnings and stacktrace splat (such as below) when accessing the 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 | mmc_host mmc0: Bus speed (slot 0) = 50000000Hz (slot req 400000Hz, actual | 396825HZ div = 63) | mmc_host mmc0: Bus speed (slot 0) = 50000000Hz (slot req 25000000Hz, actual | 25000000HZ div = 1) | ------------[ cut here ]------------ | softirq: huh, entered softirq 6 TASKLET 6f6a9412 with preempt_count 00000101, | exited with 00000100? | WARNING: CPU: 2 PID: 0 at ../lib/scatterlist.c:652 sg_miter_next+0x28/0x20c | Modules linked in: | CPU: 2 PID: 0 Comm: swapper/2 Not tainted 4.15.0 #57 | | Stack Trace: | arc_unwind_core.constprop.1+0xd0/0xf4 | dump_stack+0x68/0x80 | warn_slowpath_null+0x4e/0xec | sg_miter_next+0x28/0x20c | dw_mci_read_data_pio+0x44/0x190 | dw_mmc f000a000.mmc: Unexpected interrupt latency | dw_mci_interrupt+0x3ee/0x530 | __handle_irq_event_percpu+0x56/0x150 | handle_irq_event+0x34/0x78 | handle_level_irq+0x8e/0x120 | generic_handle_irq+0x1c/0x2c | idu_cascade_isr+0x30/0x6c | __handle_domain_irq+0x72/0xc8 | ret_from_exception+0x0/0x8 |---[ end trace 2a58c9af6c25fe51 ]--- Lets cast this multiply to u64 type which prevents overflow. Tested-by: Vineet Gupta <Vineet.Gupta1@synopsys.com> Fixes: ARC STAR 9001306872 HSDK, sdio: board crashes when copying big files Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com> CC: Alexey Brodkin <abrodkin@synopsys.com> CC: Eugeniy Paltsev <paltsev@synopsys.com> CC: Douglas Anderson <dianders@chromium.org> CC: Ulf Hansson <ulf.hansson@linaro.org> CC: linux-kernel@vger.kernel.org CC: linux-snps-arc@lists.infradead.org Cc: <stable@vger.kernel.org> # 9d9491a7da2a mmc: dw_mmc: Fix the DTO timeout calculation --- Nothing changed since v2. drivers/mmc/host/dw_mmc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index 0aa39975f33b..194159219b32 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -1944,7 +1944,8 @@ 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, + + drto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * drto_clks * drto_div, host->bus_hz); /* add a bit spare time */ -- 2.11.0 ^ permalink raw reply related [flat|nested] 36+ messages in thread
* Re: [PATCH 1/2 v3] mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit systems 2018-02-26 14:34 ` Evgeniy Didin @ 2018-02-26 14:40 ` Andy Shevchenko -1 siblings, 0 replies; 36+ messages in thread From: Andy Shevchenko @ 2018-02-26 14:40 UTC (permalink / raw) To: Evgeniy Didin Cc: linux-mmc, Alexey Brodkin, Eugeniy Paltsev, Douglas Anderson, Ulf Hansson, Linux Kernel Mailing List, linux-snps-arc, Stable, Vineet Gupta On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin <Evgeniy.Didin@synopsys.com> wrote: > In commit 9d9491a7da2a ("mmc: dw_mmc: Fix the DTO timeout calculation") have been made > changes which cause multiply overflow for 32-bit systems. > The broken timeout calculations caused false interrupt latency warnings > and stacktrace splat (such as below) when accessing the SD Card. > + drto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * drto_clks * drto_div, > host->bus_hz); Same as per patch 2. -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 1/2 v3] mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit systems @ 2018-02-26 14:40 ` Andy Shevchenko 0 siblings, 0 replies; 36+ messages in thread From: Andy Shevchenko @ 2018-02-26 14:40 UTC (permalink / raw) To: linux-snps-arc On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin <Evgeniy.Didin@synopsys.com> wrote: > In commit 9d9491a7da2a ("mmc: dw_mmc: Fix the DTO timeout calculation") have been made > changes which cause multiply overflow for 32-bit systems. > The broken timeout calculations caused false interrupt latency warnings > and stacktrace splat (such as below) when accessing the SD Card. > + drto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * drto_clks * drto_div, > host->bus_hz); Same as per patch 2. -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 1/2 v3] mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit systems 2018-02-26 14:34 ` Evgeniy Didin @ 2018-02-27 1:14 ` Shawn Lin -1 siblings, 0 replies; 36+ messages in thread From: Shawn Lin @ 2018-02-27 1:14 UTC (permalink / raw) To: Evgeniy Didin, linux-mmc Cc: shawn.lin, Alexey Brodkin, Eugeniy Paltsev, Douglas Anderson, Ulf Hansson, linux-kernel, linux-snps-arc, stable, Vineet Gupta > Tested-by: Vineet Gupta <Vineet.Gupta1@synopsys.com> > Fixes: ARC STAR 9001306872 HSDK, sdio: board crashes when copying big files > > Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com> > > CC: Alexey Brodkin <abrodkin@synopsys.com> > CC: Eugeniy Paltsev <paltsev@synopsys.com> > CC: Douglas Anderson <dianders@chromium.org> > CC: Ulf Hansson <ulf.hansson@linaro.org> > CC: linux-kernel@vger.kernel.org > CC: linux-snps-arc@lists.infradead.org > Cc: <stable@vger.kernel.org> # 9d9491a7da2a mmc: dw_mmc: Fix the DTO timeout calculation As I said, the correct tag may be: Reported-by: Vineet Gupta <Vineet.Gupta1@synopsys.com> # ARC STAR 9001306872 HSDK, sdio: board crashes when copying big files Tested-by: Vineet Gupta <Vineet.Gupta1@synopsys.com> Fixes: 9d9491a7da2a ("mmc: dw_mmc: Fix the DTO timeout calculation") Cc: <stable@vger.kernel.org> Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com> ... ... > --- > Nothing changed since v2. > drivers/mmc/host/dw_mmc.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > - drto_ms = DIV_ROUND_UP(MSEC_PER_SEC * drto_clks * drto_div, > + > + drto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * drto_clks * drto_div, > host->bus_hz); > Hmm? #define DIV_ROUND_DOWN_ULL(ll, d) \ ({ unsigned long long _tmp = (ll); do_div(_tmp, d); _tmp; }) #define DIV_ROUND_UP_ULL(ll, d) DIV_ROUND_DOWN_ULL((ll) + (d) - 1, (d)) It uses intermediate unsigned long long _tmp for your "multiply", namely MSEC_PER_SEC * drto_clks * drto_div, which could solves the problem. So I don't see why DIV_ROUND_UP_ULL can't work for you? > /* add a bit spare time */ > ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 1/2 v3] mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit systems @ 2018-02-27 1:14 ` Shawn Lin 0 siblings, 0 replies; 36+ messages in thread From: Shawn Lin @ 2018-02-27 1:14 UTC (permalink / raw) To: linux-snps-arc > Tested-by: Vineet Gupta <Vineet.Gupta1 at synopsys.com> > Fixes: ARC STAR 9001306872 HSDK, sdio: board crashes when copying big files > > Signed-off-by: Evgeniy Didin <Evgeniy.Didin at synopsys.com> > > CC: Alexey Brodkin <abrodkin at synopsys.com> > CC: Eugeniy Paltsev <paltsev at synopsys.com> > CC: Douglas Anderson <dianders at chromium.org> > CC: Ulf Hansson <ulf.hansson at linaro.org> > CC: linux-kernel at vger.kernel.org > CC: linux-snps-arc at lists.infradead.org > Cc: <stable at vger.kernel.org> # 9d9491a7da2a mmc: dw_mmc: Fix the DTO timeout calculation As I said, the correct tag may be: Reported-by: Vineet Gupta <Vineet.Gupta1 at synopsys.com> # ARC STAR 9001306872 HSDK, sdio: board crashes when copying big files Tested-by: Vineet Gupta <Vineet.Gupta1 at synopsys.com> Fixes: 9d9491a7da2a ("mmc: dw_mmc: Fix the DTO timeout calculation") Cc: <stable at vger.kernel.org> Signed-off-by: Evgeniy Didin <Evgeniy.Didin at synopsys.com> ... ... > --- > Nothing changed since v2. > drivers/mmc/host/dw_mmc.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > - drto_ms = DIV_ROUND_UP(MSEC_PER_SEC * drto_clks * drto_div, > + > + drto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * drto_clks * drto_div, > host->bus_hz); > Hmm? #define DIV_ROUND_DOWN_ULL(ll, d) \ ({ unsigned long long _tmp = (ll); do_div(_tmp, d); _tmp; }) #define DIV_ROUND_UP_ULL(ll, d) DIV_ROUND_DOWN_ULL((ll) + (d) - 1, (d)) It uses intermediate unsigned long long _tmp for your "multiply", namely MSEC_PER_SEC * drto_clks * drto_div, which could solves the problem. So I don't see why DIV_ROUND_UP_ULL can't work for you? > /* add a bit spare time */ > ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 1/2 v3] mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit systems 2018-02-27 1:14 ` Shawn Lin @ 2018-02-27 1:46 ` Shawn Lin -1 siblings, 0 replies; 36+ messages in thread From: Shawn Lin @ 2018-02-27 1:46 UTC (permalink / raw) To: Evgeniy Didin Cc: Ulf Hansson, shawn.lin, Alexey Brodkin, linux-mmc, Douglas Anderson, stable, linux-kernel, linux-snps-arc, Eugeniy Paltsev, Vineet Gupta > > #define DIV_ROUND_DOWN_ULL(ll, d) \ > ({ unsigned long long _tmp = (ll); do_div(_tmp, d); _tmp; }) > > #define DIV_ROUND_UP_ULL(ll, d) DIV_ROUND_DOWN_ULL((ll) + (d) - > 1, (d)) > > > It uses intermediate unsigned long long _tmp for your "multiply", namely > MSEC_PER_SEC * drto_clks * drto_div, which could solves the problem. > So I don't see why DIV_ROUND_UP_ULL can't work for you? Take back. I misunderstood your "multiply", sorry. > > >> /* add a bit spare time */ >> > > > _______________________________________________ linux-snps-arc mailing list linux-snps-arc@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-snps-arc ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 1/2 v3] mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit systems @ 2018-02-27 1:46 ` Shawn Lin 0 siblings, 0 replies; 36+ messages in thread From: Shawn Lin @ 2018-02-27 1:46 UTC (permalink / raw) To: linux-snps-arc > > #define DIV_ROUND_DOWN_ULL(ll, d) \ > ????({ unsigned long long _tmp = (ll); do_div(_tmp, d); _tmp; }) > > #define DIV_ROUND_UP_ULL(ll, d)??????? DIV_ROUND_DOWN_ULL((ll) + (d) - > 1, (d)) > > > It uses intermediate unsigned long long _tmp for your "multiply", namely > MSEC_PER_SEC * drto_clks * drto_div, which could solves the problem. > So I don't see why DIV_ROUND_UP_ULL can't work for you? Take back. I misunderstood your "multiply", sorry. > > >> ????? /* add a bit spare time */ >> > > > ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 1/2 v3] mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit systems 2018-02-26 14:34 ` Evgeniy Didin @ 2018-03-01 1:22 ` kbuild test robot -1 siblings, 0 replies; 36+ messages in thread From: kbuild test robot @ 2018-03-01 1:22 UTC (permalink / raw) To: Evgeniy Didin Cc: kbuild-all, linux-mmc, Alexey Brodkin, Eugeniy Paltsev, Douglas Anderson, Ulf Hansson, linux-kernel, linux-snps-arc, stable, Vineet Gupta [-- Attachment #1: Type: text/plain, Size: 1081 bytes --] Hi Evgeniy, Thank you for the patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v4.16-rc3 next-20180228] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Evgeniy-Didin/mmc-dw_mmc-Fix-the-DTO-timeout-overflow-calculation-for-32-bit-systems/20180228-141447 config: arm-exynos_defconfig (attached as .config) compiler: arm-linux-gnueabi-gcc (Debian 7.2.0-11) 7.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=arm All errors (new ones prefixed by >>): drivers/mmc/host/dw_mmc.o: In function `dw_mci_set_drto': >> dw_mmc.c:(.text+0x1644): undefined reference to `__aeabi_uldivmod' --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 28590 bytes --] ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 1/2 v3] mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit systems @ 2018-03-01 1:22 ` kbuild test robot 0 siblings, 0 replies; 36+ messages in thread From: kbuild test robot @ 2018-03-01 1:22 UTC (permalink / raw) To: linux-snps-arc Hi Evgeniy, Thank you for the patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v4.16-rc3 next-20180228] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Evgeniy-Didin/mmc-dw_mmc-Fix-the-DTO-timeout-overflow-calculation-for-32-bit-systems/20180228-141447 config: arm-exynos_defconfig (attached as .config) compiler: arm-linux-gnueabi-gcc (Debian 7.2.0-11) 7.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=arm All errors (new ones prefixed by >>): drivers/mmc/host/dw_mmc.o: In function `dw_mci_set_drto': >> dw_mmc.c:(.text+0x1644): undefined reference to `__aeabi_uldivmod' --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation -------------- next part -------------- A non-text attachment was scrubbed... Name: .config.gz Type: application/gzip Size: 28590 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-snps-arc/attachments/20180301/cd535eb9/attachment-0001.gz> ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems 2018-02-26 14:34 ` Evgeniy Didin @ 2018-02-26 14:34 ` Evgeniy Didin -1 siblings, 0 replies; 36+ messages in thread From: Evgeniy Didin @ 2018-02-26 14:34 UTC (permalink / raw) To: linux-mmc Cc: Alexey Brodkin, Eugeniy Paltsev, Douglas Anderson, Ulf Hansson, linux-kernel, linux-snps-arc, stable, Vineet Gupta In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") have been made changes which can cause multiply overflow for 32-bit systems. The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. Lets cast this multiply to u64 type which prevents overflow. Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com> CC: Alexey Brodkin <abrodkin@synopsys.com> CC: Eugeniy Paltsev <paltsev@synopsys.com> CC: Douglas Anderson <dianders@chromium.org> CC: Ulf Hansson <ulf.hansson@linaro.org> CC: linux-kernel@vger.kernel.org CC: linux-snps-arc@lists.infradead.org Cc: <stable@vger.kernel.org> # 4c2357f57dd5 mmc: dw_mmc: Fix the CTO timeout calculation --- drivers/mmc/host/dw_mmc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index 194159219b32..775fb3ae1443 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -409,7 +409,8 @@ 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((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); /* add a bit spare time */ cto_ms += 10; -- 2.11.0 ^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems @ 2018-02-26 14:34 ` Evgeniy Didin 0 siblings, 0 replies; 36+ messages in thread From: Evgeniy Didin @ 2018-02-26 14:34 UTC (permalink / raw) To: linux-snps-arc In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") have been made changes which can cause multiply overflow for 32-bit systems. The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. Lets cast this multiply to u64 type which prevents overflow. Signed-off-by: Evgeniy Didin <Evgeniy.Didin at synopsys.com> CC: Alexey Brodkin <abrodkin at synopsys.com> CC: Eugeniy Paltsev <paltsev at synopsys.com> CC: Douglas Anderson <dianders at chromium.org> CC: Ulf Hansson <ulf.hansson at linaro.org> CC: linux-kernel at vger.kernel.org CC: linux-snps-arc at lists.infradead.org Cc: <stable at vger.kernel.org> # 4c2357f57dd5 mmc: dw_mmc: Fix the CTO timeout calculation --- drivers/mmc/host/dw_mmc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index 194159219b32..775fb3ae1443 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -409,7 +409,8 @@ 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((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); /* add a bit spare time */ cto_ms += 10; -- 2.11.0 ^ permalink raw reply related [flat|nested] 36+ messages in thread
* Re: [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems 2018-02-26 14:34 ` Evgeniy Didin @ 2018-02-26 14:39 ` Andy Shevchenko -1 siblings, 0 replies; 36+ messages in thread From: Andy Shevchenko @ 2018-02-26 14:39 UTC (permalink / raw) To: Evgeniy Didin Cc: linux-mmc, Alexey Brodkin, Eugeniy Paltsev, Douglas Anderson, Ulf Hansson, Linux Kernel Mailing List, linux-snps-arc, Stable, Vineet Gupta On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin <Evgeniy.Didin@synopsys.com> wrote: > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") > have been made changes which can cause multiply overflow for 32-bit systems. > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. > Lets cast this multiply to u64 type which prevents overflow. > - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > + > + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); IIRC, someone commented on this or similar, i.e. DIV_ROUND_UP_ULL() ? -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems @ 2018-02-26 14:39 ` Andy Shevchenko 0 siblings, 0 replies; 36+ messages in thread From: Andy Shevchenko @ 2018-02-26 14:39 UTC (permalink / raw) To: linux-snps-arc On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin <Evgeniy.Didin@synopsys.com> wrote: > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") > have been made changes which can cause multiply overflow for 32-bit systems. > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. > Lets cast this multiply to u64 type which prevents overflow. > - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > + > + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); IIRC, someone commented on this or similar, i.e. DIV_ROUND_UP_ULL() ? -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems 2018-02-26 14:39 ` Andy Shevchenko (?) @ 2018-02-26 15:14 ` Evgeniy Didin -1 siblings, 0 replies; 36+ messages in thread From: Evgeniy Didin @ 2018-02-26 15:14 UTC (permalink / raw) To: andy.shevchenko, Evgeniy.Didin Cc: linux-kernel, Alexey.Brodkin, linux-mmc, dianders, Vineet.Gupta1, Eugeniy.Paltsev, linux-snps-arc, stable, ulf.hansson On Mon, 2018-02-26 at 16:39 +0200, Andy Shevchenko wrote: > On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin > <Evgeniy.Didin@synopsys.com> wrote: > > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") > > have been made changes which can cause multiply overflow for 32-bit systems. > > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. > > Lets cast this multiply to u64 type which prevents overflow. > > - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > + > > + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > IIRC, someone commented on this or similar, i.e. > > DIV_ROUND_UP_ULL() ? Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable because overflow happens on multiply and DIV_ROUND_UP_ULL helps with sum overflow. -- Best regards, Evgeniy Didin ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems @ 2018-02-26 15:14 ` Evgeniy Didin 0 siblings, 0 replies; 36+ messages in thread From: Evgeniy Didin @ 2018-02-26 15:14 UTC (permalink / raw) To: linux-snps-arc On Mon, 2018-02-26@16:39 +0200, Andy Shevchenko wrote: > On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin > <Evgeniy.Didin@synopsys.com> wrote: > > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") > > have been made changes which can cause multiply overflow for 32-bit systems. > > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. > > Lets cast this multiply to u64 type which prevents overflow. > > -???????cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > + > > +???????cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > IIRC, someone commented on this or similar, i.e. > > DIV_ROUND_UP_ULL() ? Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable because overflow happens on multiply and DIV_ROUND_UP_ULL helps with sum overflow. -- Best regards, Evgeniy Didin ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems @ 2018-02-26 15:14 ` Evgeniy Didin 0 siblings, 0 replies; 36+ messages in thread From: Evgeniy Didin @ 2018-02-26 15:14 UTC (permalink / raw) To: andy.shevchenko, Evgeniy.Didin Cc: ulf.hansson, Vineet.Gupta1, Alexey.Brodkin, linux-mmc, linux-kernel, stable, dianders, linux-snps-arc, Eugeniy.Paltsev On Mon, 2018-02-26 at 16:39 +0200, Andy Shevchenko wrote: > On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin > <Evgeniy.Didin@synopsys.com> wrote: > > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") > > have been made changes which can cause multiply overflow for 32-bit systems. > > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. > > Lets cast this multiply to u64 type which prevents overflow. > > - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > + > > + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > IIRC, someone commented on this or similar, i.e. > > DIV_ROUND_UP_ULL() ? Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable because overflow happens on multiply and DIV_ROUND_UP_ULL helps with sum overflow. -- Best regards, Evgeniy Didin _______________________________________________ linux-snps-arc mailing list linux-snps-arc@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-snps-arc ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems 2018-02-26 15:14 ` Evgeniy Didin @ 2018-02-26 16:53 ` Andy Shevchenko -1 siblings, 0 replies; 36+ messages in thread From: Andy Shevchenko @ 2018-02-26 16:53 UTC (permalink / raw) To: Evgeniy Didin Cc: linux-kernel, Alexey.Brodkin, linux-mmc, dianders, Vineet.Gupta1, Eugeniy.Paltsev, linux-snps-arc, stable, ulf.hansson On Mon, Feb 26, 2018 at 5:14 PM, Evgeniy Didin <Evgeniy.Didin@synopsys.com> wrote: > On Mon, 2018-02-26 at 16:39 +0200, Andy Shevchenko wrote: >> On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin >> <Evgeniy.Didin@synopsys.com> wrote: >> > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") >> > have been made changes which can cause multiply overflow for 32-bit systems. >> > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. >> > Lets cast this multiply to u64 type which prevents overflow. >> > - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); >> > + >> > + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); >> >> IIRC, someone commented on this or similar, i.e. >> >> DIV_ROUND_UP_ULL() ? > Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable > because overflow happens on multiply and DIV_ROUND_UP_ULL helps > with sum overflow. Did you try to compile your code for 32-bit target? -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems @ 2018-02-26 16:53 ` Andy Shevchenko 0 siblings, 0 replies; 36+ messages in thread From: Andy Shevchenko @ 2018-02-26 16:53 UTC (permalink / raw) To: linux-snps-arc On Mon, Feb 26, 2018 at 5:14 PM, Evgeniy Didin <Evgeniy.Didin@synopsys.com> wrote: > On Mon, 2018-02-26@16:39 +0200, Andy Shevchenko wrote: >> On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin >> <Evgeniy.Didin@synopsys.com> wrote: >> > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") >> > have been made changes which can cause multiply overflow for 32-bit systems. >> > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. >> > Lets cast this multiply to u64 type which prevents overflow. >> > - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); >> > + >> > + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); >> >> IIRC, someone commented on this or similar, i.e. >> >> DIV_ROUND_UP_ULL() ? > Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable > because overflow happens on multiply and DIV_ROUND_UP_ULL helps > with sum overflow. Did you try to compile your code for 32-bit target? -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems 2018-02-26 16:53 ` Andy Shevchenko @ 2018-02-26 17:14 ` Evgeniy Didin -1 siblings, 0 replies; 36+ messages in thread From: Evgeniy Didin @ 2018-02-26 17:14 UTC (permalink / raw) To: andy.shevchenko, Evgeniy.Didin Cc: linux-kernel, Alexey.Brodkin, linux-mmc, dianders, Vineet.Gupta1, Eugeniy.Paltsev, linux-snps-arc, stable, ulf.hansson On Mon, 2018-02-26 at 18:53 +0200, Andy Shevchenko wrote: > On Mon, Feb 26, 2018 at 5:14 PM, Evgeniy Didin > <Evgeniy.Didin@synopsys.com> wrote: > > On Mon, 2018-02-26 at 16:39 +0200, Andy Shevchenko wrote: > > > On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin > > > <Evgeniy.Didin@synopsys.com> wrote: > > > > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") > > > > have been made changes which can cause multiply overflow for 32-bit systems. > > > > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. > > > > Lets cast this multiply to u64 type which prevents overflow. > > > > - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > > > + > > > > + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > > > > > IIRC, someone commented on this or similar, i.e. > > > > > > DIV_ROUND_UP_ULL() ? > > > > Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable > > because overflow happens on multiply and DIV_ROUND_UP_ULL helps > > with sum overflow. > > Did you try to compile your code for 32-bit target? Yes, we have compiled code for 32-bit system. I am wondering why are you asking that? -- Best regards, Evgeniy Didin ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems @ 2018-02-26 17:14 ` Evgeniy Didin 0 siblings, 0 replies; 36+ messages in thread From: Evgeniy Didin @ 2018-02-26 17:14 UTC (permalink / raw) To: linux-snps-arc On Mon, 2018-02-26@18:53 +0200, Andy Shevchenko wrote: > On Mon, Feb 26, 2018 at 5:14 PM, Evgeniy Didin > <Evgeniy.Didin@synopsys.com> wrote: > > On Mon, 2018-02-26@16:39 +0200, Andy Shevchenko wrote: > > > On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin > > > <Evgeniy.Didin@synopsys.com> wrote: > > > > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") > > > > have been made changes which can cause multiply overflow for 32-bit systems. > > > > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. > > > > Lets cast this multiply to u64 type which prevents overflow. > > > > -???????cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > > > + > > > > +???????cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > > > > > IIRC, someone commented on this or similar, i.e. > > > > > > DIV_ROUND_UP_ULL() ? > > > > Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable > > because overflow happens on multiply and DIV_ROUND_UP_ULL helps > > with sum overflow. > > Did you try to compile your code for 32-bit target? Yes, we have compiled code for 32-bit system.? I am wondering why are you asking that? -- Best regards, Evgeniy Didin ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems 2018-02-26 17:14 ` Evgeniy Didin @ 2018-02-26 18:30 ` Andy Shevchenko -1 siblings, 0 replies; 36+ messages in thread From: Andy Shevchenko @ 2018-02-26 18:30 UTC (permalink / raw) To: Evgeniy Didin Cc: linux-kernel, Alexey.Brodkin, linux-mmc, dianders, Vineet.Gupta1, Eugeniy.Paltsev, linux-snps-arc, stable, ulf.hansson On Mon, Feb 26, 2018 at 7:14 PM, Evgeniy Didin <Evgeniy.Didin@synopsys.com> wrote: > On Mon, 2018-02-26 at 18:53 +0200, Andy Shevchenko wrote: >> On Mon, Feb 26, 2018 at 5:14 PM, Evgeniy Didin >> <Evgeniy.Didin@synopsys.com> wrote: >> > On Mon, 2018-02-26 at 16:39 +0200, Andy Shevchenko wrote: >> > > On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin >> > > <Evgeniy.Didin@synopsys.com> wrote: >> > > > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") >> > > > have been made changes which can cause multiply overflow for 32-bit systems. >> > > > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. >> > > > Lets cast this multiply to u64 type which prevents overflow. >> > > > - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); >> > > > + >> > > > + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); >> > > >> > > IIRC, someone commented on this or similar, i.e. >> > > >> > > DIV_ROUND_UP_ULL() ? >> > >> > Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable >> > because overflow happens on multiply and DIV_ROUND_UP_ULL helps >> > with sum overflow. >> >> Did you try to compile your code for 32-bit target? > Yes, we have compiled code for 32-bit system. > I am wondering why are you asking that? Because I simple didn't believe you. ERROR: "__udivdi3" [drivers/mmc/host/dw_mmc.ko] undefined! ...scripts/Makefile.modpost:92: recipe for target '__modpost' failed make[2]: *** [__modpost] Error 1 +++ b/drivers/mmc/host/dw_mmc.c @@ -409,7 +409,7 @@ static inline void dw_mci_set_cto(struct dw_mci *host) - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems @ 2018-02-26 18:30 ` Andy Shevchenko 0 siblings, 0 replies; 36+ messages in thread From: Andy Shevchenko @ 2018-02-26 18:30 UTC (permalink / raw) To: linux-snps-arc On Mon, Feb 26, 2018 at 7:14 PM, Evgeniy Didin <Evgeniy.Didin@synopsys.com> wrote: > On Mon, 2018-02-26@18:53 +0200, Andy Shevchenko wrote: >> On Mon, Feb 26, 2018 at 5:14 PM, Evgeniy Didin >> <Evgeniy.Didin@synopsys.com> wrote: >> > On Mon, 2018-02-26@16:39 +0200, Andy Shevchenko wrote: >> > > On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin >> > > <Evgeniy.Didin@synopsys.com> wrote: >> > > > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") >> > > > have been made changes which can cause multiply overflow for 32-bit systems. >> > > > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. >> > > > Lets cast this multiply to u64 type which prevents overflow. >> > > > - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); >> > > > + >> > > > + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); >> > > >> > > IIRC, someone commented on this or similar, i.e. >> > > >> > > DIV_ROUND_UP_ULL() ? >> > >> > Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable >> > because overflow happens on multiply and DIV_ROUND_UP_ULL helps >> > with sum overflow. >> >> Did you try to compile your code for 32-bit target? > Yes, we have compiled code for 32-bit system. > I am wondering why are you asking that? Because I simple didn't believe you. ERROR: "__udivdi3" [drivers/mmc/host/dw_mmc.ko] undefined! ...scripts/Makefile.modpost:92: recipe for target '__modpost' failed make[2]: *** [__modpost] Error 1 +++ b/drivers/mmc/host/dw_mmc.c @@ -409,7 +409,7 @@ static inline void dw_mci_set_cto(struct dw_mci *host) - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems 2018-02-26 18:30 ` Andy Shevchenko (?) @ 2018-02-26 20:27 ` Alexey Brodkin -1 siblings, 0 replies; 36+ messages in thread From: Alexey Brodkin @ 2018-02-26 20:27 UTC (permalink / raw) To: andy.shevchenko Cc: linux-kernel, dianders, linux-mmc, Vineet.Gupta1, Eugeniy.Paltsev, linux-snps-arc, stable, Evgeniy.Didin, ulf.hansson Hi Andy, On Mon, 2018-02-26 at 20:30 +0200, Andy Shevchenko wrote: > On Mon, Feb 26, 2018 at 7:14 PM, Evgeniy Didin > <Evgeniy.Didin@synopsys.com> wrote: > > On Mon, 2018-02-26 at 18:53 +0200, Andy Shevchenko wrote: > > > On Mon, Feb 26, 2018 at 5:14 PM, Evgeniy Didin > > > <Evgeniy.Didin@synopsys.com> wrote: > > > > On Mon, 2018-02-26 at 16:39 +0200, Andy Shevchenko wrote: > > > > > On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin > > > > > <Evgeniy.Didin@synopsys.com> wrote: > > > > > > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") > > > > > > have been made changes which can cause multiply overflow for 32-bit systems. > > > > > > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. > > > > > > Lets cast this multiply to u64 type which prevents overflow. > > > > > > - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > > > > > + > > > > > > + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > > > > > > > > > IIRC, someone commented on this or similar, i.e. > > > > > > > > > > DIV_ROUND_UP_ULL() ? > > > > > > > > Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable > > > > because overflow happens on multiply and DIV_ROUND_UP_ULL helps > > > > with sum overflow. > > > > > > Did you try to compile your code for 32-bit target? > > > > Yes, we have compiled code for 32-bit system. > > I am wondering why are you asking that? > > Because I simple didn't believe you. Well world around us is much more complicated than it sometimes looks like :) > ERROR: "__udivdi3" [drivers/mmc/host/dw_mmc.ko] undefined! > ...scripts/Makefile.modpost:92: recipe for target '__modpost' failed > make[2]: *** [__modpost] Error 1 That's right __udivdi3() is not defined for some architectures but it is defined for some others including ARC, Xtensa etc, see https://elixir.bootlin.com/linux/latest/ident/__udivdi3 What happens __udivdi3() is implemented in libgcc in one form or another form be it pure assembly or generic implementation written in C. So maybe we need to add export of __udivdi3() for other arches, what do you think? -Alexey ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems @ 2018-02-26 20:27 ` Alexey Brodkin 0 siblings, 0 replies; 36+ messages in thread From: Alexey Brodkin @ 2018-02-26 20:27 UTC (permalink / raw) To: linux-snps-arc Hi Andy, On Mon, 2018-02-26@20:30 +0200, Andy Shevchenko wrote: > On Mon, Feb 26, 2018 at 7:14 PM, Evgeniy Didin > <Evgeniy.Didin@synopsys.com> wrote: > > On Mon, 2018-02-26@18:53 +0200, Andy Shevchenko wrote: > > > On Mon, Feb 26, 2018 at 5:14 PM, Evgeniy Didin > > > <Evgeniy.Didin@synopsys.com> wrote: > > > > On Mon, 2018-02-26@16:39 +0200, Andy Shevchenko wrote: > > > > > On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin > > > > > <Evgeniy.Didin@synopsys.com> wrote: > > > > > > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") > > > > > > have been made changes which can cause multiply overflow for 32-bit systems. > > > > > > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. > > > > > > Lets cast this multiply to u64 type which prevents overflow. > > > > > > - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > > > > > + > > > > > > + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > > > > > > > > > IIRC, someone commented on this or similar, i.e. > > > > > > > > > > DIV_ROUND_UP_ULL() ? > > > > > > > > Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable > > > > because overflow happens on multiply and DIV_ROUND_UP_ULL helps > > > > with sum overflow. > > > > > > Did you try to compile your code for 32-bit target? > > > > Yes, we have compiled code for 32-bit system. > > I am wondering why are you asking that? > > Because I simple didn't believe you. Well world around us is much more complicated than it sometimes looks like :) > ERROR: "__udivdi3" [drivers/mmc/host/dw_mmc.ko] undefined! > ...scripts/Makefile.modpost:92: recipe for target '__modpost' failed > make[2]: *** [__modpost] Error 1 That's right __udivdi3() is not defined for some architectures but it is defined for some others including ARC, Xtensa etc, see https://elixir.bootlin.com/linux/latest/ident/__udivdi3 What happens __udivdi3() is implemented in libgcc in one form or another form be it pure assembly or generic implementation written in C. So maybe we need to add export of __udivdi3() for other arches, what do you think? -Alexey ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems @ 2018-02-26 20:27 ` Alexey Brodkin 0 siblings, 0 replies; 36+ messages in thread From: Alexey Brodkin @ 2018-02-26 20:27 UTC (permalink / raw) To: andy.shevchenko Cc: ulf.hansson, Vineet.Gupta1, linux-mmc, linux-kernel, stable, dianders, Evgeniy.Didin, linux-snps-arc, Eugeniy.Paltsev Hi Andy, On Mon, 2018-02-26 at 20:30 +0200, Andy Shevchenko wrote: > On Mon, Feb 26, 2018 at 7:14 PM, Evgeniy Didin > <Evgeniy.Didin@synopsys.com> wrote: > > On Mon, 2018-02-26 at 18:53 +0200, Andy Shevchenko wrote: > > > On Mon, Feb 26, 2018 at 5:14 PM, Evgeniy Didin > > > <Evgeniy.Didin@synopsys.com> wrote: > > > > On Mon, 2018-02-26 at 16:39 +0200, Andy Shevchenko wrote: > > > > > On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin > > > > > <Evgeniy.Didin@synopsys.com> wrote: > > > > > > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") > > > > > > have been made changes which can cause multiply overflow for 32-bit systems. > > > > > > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. > > > > > > Lets cast this multiply to u64 type which prevents overflow. > > > > > > - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > > > > > + > > > > > > + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > > > > > > > > > IIRC, someone commented on this or similar, i.e. > > > > > > > > > > DIV_ROUND_UP_ULL() ? > > > > > > > > Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable > > > > because overflow happens on multiply and DIV_ROUND_UP_ULL helps > > > > with sum overflow. > > > > > > Did you try to compile your code for 32-bit target? > > > > Yes, we have compiled code for 32-bit system. > > I am wondering why are you asking that? > > Because I simple didn't believe you. Well world around us is much more complicated than it sometimes looks like :) > ERROR: "__udivdi3" [drivers/mmc/host/dw_mmc.ko] undefined! > ...scripts/Makefile.modpost:92: recipe for target '__modpost' failed > make[2]: *** [__modpost] Error 1 That's right __udivdi3() is not defined for some architectures but it is defined for some others including ARC, Xtensa etc, see https://elixir.bootlin.com/linux/latest/ident/__udivdi3 What happens __udivdi3() is implemented in libgcc in one form or another form be it pure assembly or generic implementation written in C. So maybe we need to add export of __udivdi3() for other arches, what do you think? -Alexey ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems 2018-02-26 20:27 ` Alexey Brodkin @ 2018-02-27 3:52 ` Jisheng Zhang -1 siblings, 0 replies; 36+ messages in thread From: Jisheng Zhang @ 2018-02-27 3:52 UTC (permalink / raw) To: Alexey Brodkin Cc: andy.shevchenko, linux-kernel, dianders, linux-mmc, Vineet.Gupta1, Eugeniy.Paltsev, linux-snps-arc, stable, Evgeniy.Didin, ulf.hansson On Mon, 26 Feb 2018 20:27:22 +0000 Alexey Brodkin wrote: > Hi Andy, > > On Mon, 2018-02-26 at 20:30 +0200, Andy Shevchenko wrote: > > On Mon, Feb 26, 2018 at 7:14 PM, Evgeniy Didin > > <Evgeniy.Didin@synopsys.com> wrote: > > > On Mon, 2018-02-26 at 18:53 +0200, Andy Shevchenko wrote: > > > > On Mon, Feb 26, 2018 at 5:14 PM, Evgeniy Didin > > > > <Evgeniy.Didin@synopsys.com> wrote: > > > > > On Mon, 2018-02-26 at 16:39 +0200, Andy Shevchenko wrote: > > > > > > On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin > > > > > > <Evgeniy.Didin@synopsys.com> wrote: > > > > > > > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") > > > > > > > have been made changes which can cause multiply overflow for 32-bit systems. > > > > > > > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. > > > > > > > Lets cast this multiply to u64 type which prevents overflow. > > > > > > > - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > > > > > > + > > > > > > > + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > > > > > > > > > > > IIRC, someone commented on this or similar, i.e. > > > > > > > > > > > > DIV_ROUND_UP_ULL() ? > > > > > > > > > > Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable > > > > > because overflow happens on multiply and DIV_ROUND_UP_ULL helps > > > > > with sum overflow. > > > > > > > > Did you try to compile your code for 32-bit target? > > > > > > Yes, we have compiled code for 32-bit system. > > > I am wondering why are you asking that? > > > > Because I simple didn't believe you. > > Well world around us is much more complicated than it sometimes looks like :) > > > ERROR: "__udivdi3" [drivers/mmc/host/dw_mmc.ko] undefined! > > ...scripts/Makefile.modpost:92: recipe for target '__modpost' failed > > make[2]: *** [__modpost] Error 1 > > That's right __udivdi3() is not defined for some architectures but it is defined for > some others including ARC, Xtensa etc, see > https://elixir.bootlin.com/linux/latest/ident/__udivdi3 > > What happens __udivdi3() is implemented in libgcc in one form or another form > be it pure assembly or generic implementation written in C. > > So maybe we need to add export of __udivdi3() for other arches, what do you think? Per my understanding, Linux kernel prefer to make use of do_div or implementations in <linux/math64.h> for 64bit divide Thanks ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems @ 2018-02-27 3:52 ` Jisheng Zhang 0 siblings, 0 replies; 36+ messages in thread From: Jisheng Zhang @ 2018-02-27 3:52 UTC (permalink / raw) To: linux-snps-arc On Mon, 26 Feb 2018 20:27:22 +0000 Alexey Brodkin wrote: > Hi Andy, > > On Mon, 2018-02-26@20:30 +0200, Andy Shevchenko wrote: > > On Mon, Feb 26, 2018 at 7:14 PM, Evgeniy Didin > > <Evgeniy.Didin at synopsys.com> wrote: > > > On Mon, 2018-02-26 at 18:53 +0200, Andy Shevchenko wrote: > > > > On Mon, Feb 26, 2018 at 5:14 PM, Evgeniy Didin > > > > <Evgeniy.Didin at synopsys.com> wrote: > > > > > On Mon, 2018-02-26 at 16:39 +0200, Andy Shevchenko wrote: > > > > > > On Mon, Feb 26, 2018 at 4:34 PM, Evgeniy Didin > > > > > > <Evgeniy.Didin at synopsys.com> wrote: > > > > > > > In commit 4c2357f57dd5 ("mmc: dw_mmc: Fix the CTO timeout calculation") > > > > > > > have been made changes which can cause multiply overflow for 32-bit systems. > > > > > > > The value of cto_ms is lower the drto_ms, but nevertheless overflow can occur. > > > > > > > Lets cast this multiply to u64 type which prevents overflow. > > > > > > > - cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > > > > > > + > > > > > > > + cto_ms = DIV_ROUND_UP((u64)MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); > > > > > > > > > > > > IIRC, someone commented on this or similar, i.e. > > > > > > > > > > > > DIV_ROUND_UP_ULL() ? > > > > > > > > > > Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable > > > > > because overflow happens on multiply and DIV_ROUND_UP_ULL helps > > > > > with sum overflow. > > > > > > > > Did you try to compile your code for 32-bit target? > > > > > > Yes, we have compiled code for 32-bit system. > > > I am wondering why are you asking that? > > > > Because I simple didn't believe you. > > Well world around us is much more complicated than it sometimes looks like :) > > > ERROR: "__udivdi3" [drivers/mmc/host/dw_mmc.ko] undefined! > > ...scripts/Makefile.modpost:92: recipe for target '__modpost' failed > > make[2]: *** [__modpost] Error 1 > > That's right __udivdi3() is not defined for some architectures but it is defined for > some others including ARC, Xtensa etc, see > https://elixir.bootlin.com/linux/latest/ident/__udivdi3 > > What happens __udivdi3() is implemented in libgcc in one form or another form > be it pure assembly or generic implementation written in C. > > So maybe we need to add export of __udivdi3() for other arches, what do you think? Per my understanding, Linux kernel prefer to make use of do_div or implementations in <linux/math64.h> for 64bit divide Thanks ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems 2018-02-27 3:52 ` Jisheng Zhang @ 2018-02-27 10:49 ` Andy Shevchenko -1 siblings, 0 replies; 36+ messages in thread From: Andy Shevchenko @ 2018-02-27 10:49 UTC (permalink / raw) To: Jisheng Zhang Cc: Alexey Brodkin, linux-kernel, dianders, linux-mmc, Vineet.Gupta1, Eugeniy.Paltsev, linux-snps-arc, stable, Evgeniy.Didin, ulf.hansson On Tue, Feb 27, 2018 at 5:52 AM, Jisheng Zhang <Jisheng.Zhang@synaptics.com> wrote: > On Mon, 26 Feb 2018 20:27:22 +0000 Alexey Brodkin wrote: >> On Mon, 2018-02-26 at 20:30 +0200, Andy Shevchenko wrote: >> > On Mon, Feb 26, 2018 at 7:14 PM, Evgeniy Didin >> > <Evgeniy.Didin@synopsys.com> wrote: >> > > On Mon, 2018-02-26 at 18:53 +0200, Andy Shevchenko wrote: >> > > > On Mon, Feb 26, 2018 at 5:14 PM, Evgeniy Didin >> > > > > > IIRC, someone commented on this or similar, i.e. >> > > > > > DIV_ROUND_UP_ULL() ? ^^^^^^^^^^^^ >> So maybe we need to add export of __udivdi3() for other arches, what do you think? > Per my understanding, Linux kernel prefer to make use of do_div or implementations > in <linux/math64.h> for 64bit divide To everyone in this thread. See just above. That's solution which will work. Other than that, drop COMPILE_TEST from the Kconfig and put a comment that driver will not compile on architectures w/o division library. -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems @ 2018-02-27 10:49 ` Andy Shevchenko 0 siblings, 0 replies; 36+ messages in thread From: Andy Shevchenko @ 2018-02-27 10:49 UTC (permalink / raw) To: linux-snps-arc On Tue, Feb 27, 2018 at 5:52 AM, Jisheng Zhang <Jisheng.Zhang@synaptics.com> wrote: > On Mon, 26 Feb 2018 20:27:22 +0000 Alexey Brodkin wrote: >> On Mon, 2018-02-26@20:30 +0200, Andy Shevchenko wrote: >> > On Mon, Feb 26, 2018 at 7:14 PM, Evgeniy Didin >> > <Evgeniy.Didin@synopsys.com> wrote: >> > > On Mon, 2018-02-26@18:53 +0200, Andy Shevchenko wrote: >> > > > On Mon, Feb 26, 2018 at 5:14 PM, Evgeniy Didin >> > > > > > IIRC, someone commented on this or similar, i.e. >> > > > > > DIV_ROUND_UP_ULL() ? ^^^^^^^^^^^^ >> So maybe we need to add export of __udivdi3() for other arches, what do you think? > Per my understanding, Linux kernel prefer to make use of do_div or implementations > in <linux/math64.h> for 64bit divide To everyone in this thread. See just above. That's solution which will work. Other than that, drop COMPILE_TEST from the Kconfig and put a comment that driver will not compile on architectures w/o division library. -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 0/2 v3] mmc: dw_mmc: Fix DTO/STO timeout overflow calculation 2018-02-26 14:34 ` Evgeniy Didin (?) @ 2018-02-27 3:02 ` Jisheng Zhang -1 siblings, 0 replies; 36+ messages in thread From: Jisheng Zhang @ 2018-02-27 3:02 UTC (permalink / raw) To: Evgeniy Didin Cc: linux-mmc, Alexey Brodkin, Eugeniy Paltsev, Douglas Anderson, Ulf Hansson, linux-kernel, linux-snps-arc, stable, Vineet Gupta On Mon, 26 Feb 2018 17:34:11 +0300 Evgeniy Didin wrote: > For some 32-bit architectures calculation of DTO and STO timeout can be incorrect > due to multiply overflow. Lets prevent this by casting multiply and result to u64. > > Suggested by Jisheng Zhang. > Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable > because overflow happens on multiply and DIV_ROUND_UP_ULL helps > with sum overflow. hmmm, I mean something as below: -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); This could avoid build error in arm case. > > --- > Changes since v2: > -add fix for cto_ms > > Evgeniy Didin (2): > mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit > systems > mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems These two patches could be folded into one patch? Thanks ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 0/2 v3] mmc: dw_mmc: Fix DTO/STO timeout overflow calculation @ 2018-02-27 3:02 ` Jisheng Zhang 0 siblings, 0 replies; 36+ messages in thread From: Jisheng Zhang @ 2018-02-27 3:02 UTC (permalink / raw) To: linux-snps-arc On Mon, 26 Feb 2018 17:34:11 +0300 Evgeniy Didin wrote: > For some 32-bit architectures calculation of DTO and STO timeout can be incorrect > due to multiply overflow. Lets prevent this by casting multiply and result to u64. > > Suggested by Jisheng Zhang. > Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable > because overflow happens on multiply and DIV_ROUND_UP_ULL helps > with sum overflow. hmmm, I mean something as below: -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); This could avoid build error in arm case. > > --- > Changes since v2: > -add fix for cto_ms > > Evgeniy Didin (2): > mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit > systems > mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems These two patches could be folded into one patch? Thanks ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 0/2 v3] mmc: dw_mmc: Fix DTO/STO timeout overflow calculation @ 2018-02-27 3:02 ` Jisheng Zhang 0 siblings, 0 replies; 36+ messages in thread From: Jisheng Zhang @ 2018-02-27 3:02 UTC (permalink / raw) To: Evgeniy Didin Cc: linux-mmc, Alexey Brodkin, Eugeniy Paltsev, Douglas Anderson, Ulf Hansson, linux-kernel, linux-snps-arc, stable, Vineet Gupta On Mon, 26 Feb 2018 17:34:11 +0300 Evgeniy Didin wrote: > For some 32-bit architectures calculation of DTO and STO timeout can be incorrect > due to multiply overflow. Lets prevent this by casting multiply and result to u64. > > Suggested by Jisheng Zhang. > Switch DIV_ROUND_UP macro to DIV_ROUND_UP_ULL is not reasonable > because overflow happens on multiply and DIV_ROUND_UP_ULL helps > with sum overflow. hmmm, I mean something as below: -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); This could avoid build error in arm case. > > --- > Changes since v2: > -add fix for cto_ms > > Evgeniy Didin (2): > mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit > systems > mmc: dw_mmc: Fix the CTO overflow calculation for 32-bit systems These two patches could be folded into one patch? Thanks ^ permalink raw reply [flat|nested] 36+ messages in thread
end of thread, other threads:[~2018-03-01 1:23 UTC | newest] Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-02-26 14:34 [PATCH 0/2 v3] mmc: dw_mmc: Fix DTO/STO timeout overflow calculation Evgeniy Didin 2018-02-26 14:34 ` Evgeniy Didin 2018-02-26 14:34 ` [PATCH 1/2 v3] mmc: dw_mmc: Fix the DTO timeout overflow calculation for 32-bit systems Evgeniy Didin 2018-02-26 14:34 ` Evgeniy Didin 2018-02-26 14:34 ` Evgeniy Didin 2018-02-26 14:40 ` Andy Shevchenko 2018-02-26 14:40 ` Andy Shevchenko 2018-02-27 1:14 ` Shawn Lin 2018-02-27 1:14 ` Shawn Lin 2018-02-27 1:46 ` Shawn Lin 2018-02-27 1:46 ` Shawn Lin 2018-03-01 1:22 ` kbuild test robot 2018-03-01 1:22 ` kbuild test robot 2018-02-26 14:34 ` [PATCH 2/2 v3] mmc: dw_mmc: Fix the CTO " Evgeniy Didin 2018-02-26 14:34 ` Evgeniy Didin 2018-02-26 14:39 ` Andy Shevchenko 2018-02-26 14:39 ` Andy Shevchenko 2018-02-26 15:14 ` Evgeniy Didin 2018-02-26 15:14 ` Evgeniy Didin 2018-02-26 15:14 ` Evgeniy Didin 2018-02-26 16:53 ` Andy Shevchenko 2018-02-26 16:53 ` Andy Shevchenko 2018-02-26 17:14 ` Evgeniy Didin 2018-02-26 17:14 ` Evgeniy Didin 2018-02-26 18:30 ` Andy Shevchenko 2018-02-26 18:30 ` Andy Shevchenko 2018-02-26 20:27 ` Alexey Brodkin 2018-02-26 20:27 ` Alexey Brodkin 2018-02-26 20:27 ` Alexey Brodkin 2018-02-27 3:52 ` Jisheng Zhang 2018-02-27 3:52 ` Jisheng Zhang 2018-02-27 10:49 ` Andy Shevchenko 2018-02-27 10:49 ` Andy Shevchenko 2018-02-27 3:02 ` [PATCH 0/2 v3] mmc: dw_mmc: Fix DTO/STO timeout overflow calculation Jisheng Zhang 2018-02-27 3:02 ` Jisheng Zhang 2018-02-27 3:02 ` Jisheng Zhang
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.