| From b906c056b6023c390f18347169071193fda57dde Mon Sep 17 00:00:00 2001 |
| From: Dmitry Osipenko <digetx@gmail.com> |
| Date: Fri, 12 Apr 2019 01:12:48 +0300 |
| Subject: memory: tegra: Fix integer overflow on tick value calculation |
| |
| From: Dmitry Osipenko <digetx@gmail.com> |
| |
| commit b906c056b6023c390f18347169071193fda57dde upstream. |
| |
| Multiplying the Memory Controller clock rate by the tick count results |
| in an integer overflow and in result the truncated tick value is being |
| programmed into hardware, such that the GR3D memory client performance is |
| reduced by two times. |
| |
| Cc: stable <stable@vger.kernel.org> |
| Signed-off-by: Dmitry Osipenko <digetx@gmail.com> |
| Signed-off-by: Thierry Reding <treding@nvidia.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/memory/tegra/mc.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/memory/tegra/mc.c |
| +++ b/drivers/memory/tegra/mc.c |
| @@ -72,7 +72,7 @@ static int tegra_mc_setup_latency_allowa |
| u32 value; |
| |
| /* compute the number of MC clock cycles per tick */ |
| - tick = mc->tick * clk_get_rate(mc->clk); |
| + tick = (unsigned long long)mc->tick * clk_get_rate(mc->clk); |
| do_div(tick, NSEC_PER_SEC); |
| |
| value = readl(mc->regs + MC_EMEM_ARB_CFG); |