From patchwork Fri Sep 15 19:50:36 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 814391 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xv5cy37BYz9s7c for ; Sat, 16 Sep 2017 05:51:30 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751594AbdIOTv3 (ORCPT ); Fri, 15 Sep 2017 15:51:29 -0400 Received: from mout.kundenserver.de ([212.227.126.135]:59282 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751588AbdIOTv2 (ORCPT ); Fri, 15 Sep 2017 15:51:28 -0400 Received: from wuerfel.lan ([95.208.190.237]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.129]) with ESMTPA (Nemesis) id 0MT3vW-1e1Dqi3yVC-00S5xC; Fri, 15 Sep 2017 21:51:19 +0200 From: Arnd Bergmann To: Thierry Reding , David Airlie , Jonathan Hunter Cc: Arnd Bergmann , Laurent Pinchart , Daniel Vetter , Erik Faye-Lund , Mikko Perttunen , Arto Merilainen , dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] drm: tegra: reduce stack usage in register dump helpers Date: Fri, 15 Sep 2017 21:50:36 +0200 Message-Id: <20170915195115.1316041-1-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 X-Provags-ID: V03:K0:Y2B754ge2BqdZZPwnSi071kSG30hCIXudrxUdfLQW8Das/t4Ygg om6RRAj04iXxIRSY8AaTlIThu0YkYCymgELrLEjalJy9GIGp3yyRJG9OUkgd/tpbzOLqKBe r7AGmED/J8KinaxdQOI064Zr3RVE+dpiGcOX/tZ4taE5aAkTkgFlUVzYtg5AODuwGzGG1IH awHoV2EKVsnpQmpWa+MLQ== X-UI-Out-Filterresults: notjunk:1; V01:K0:G/5bWog08wI=:LYz1HMyahEvUqqtPcI9RTZ T4bj2kBPyXHkTBwvRbd5O4lSbRckFSZVzj0Kg1eL9O9Gg+hZw3OS8WVYve2ILT+dHzzepM7fO i2FRvcVJF4pPgrAdSLKzsy+pMcfX2Jj8M1pbgkKtYvZ6fRu4xpKQWD2H755KT6Xe4XDCAr8t4 cXwLS5fSXbaz+Zg59pgTueBobqkI8zqUkg4mYMYEYdzXKUmbTn6jshjWUG8Vy19GVgv3uIkkg WnKoWEgRD1uvjpgvJIVU6h7+ZePFXEkXXJWUm9MKPBgoS1qCHdXZaZl+PSV097F8JZ0FpoiCE EJ9YdHFzm2tTQhFI0ORdN8TIXYdEGoZfVzjBK2+2AU+4lopu0005h015Z0Se1WRncCsHP2kBt xdp9VQpjV1GCbBy6KA+vRks2WS16PFB0IoD87624lDFYlKjunOkRwMuF6E8byH4tCGG6nf8O7 Zwg/Y3phm4rWNXBPHvDlHBKSqRYf667FzLDYBvtwwK1s/zQcUjfnMwfACWt8mTT2d/XY6Hpdr qkoeA2ZzwzGOLPRonDOc/naDrnYrN1rzGleIu6F2dmUkRMPICSYc123GeIoQe86CpTA2WKPSU OEQyvV68gNc3Q3PBOnSIFOZStD0T38AE/1XIa2rgFvfmc3bwuWbXao6FeEACu7y+4lA2Seds0 I4By7o+tqDFnm+B0Y4YsPB4aMTyKQOsrIvpQWusmPeLzx0f0Am1XnQa+xVwW8EkHAJ2LHX0xE ezGnaeFkCcypTXy3KDiBTyC+9z5OPoyyLTfHqQ== Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org The tracing code in the tegra drm driver can lead to excessive stack usage in somem tegra_*_show_regs() functions: drivers/gpu/drm/tegra/dc.c: In function 'tegra_dc_show_regs': drivers/gpu/drm/tegra/dc.c:1639: error: the frame size of 1704 bytes is larger than 1024 bytes drivers/gpu/drm/tegra/hdmi.c: In function 'tegra_hdmi_show_regs': drivers/gpu/drm/tegra/hdmi.c:1414: error: the frame size of 1320 bytes is larger than 1024 bytes I assume that we don't actually need to trace the register accesses in those functions, so I'm converting all four instances of this code to skip the tracing, which brings the stack usage down to acceptable levels. Signed-off-by: Arnd Bergmann --- drivers/gpu/drm/tegra/dc.c | 2 +- drivers/gpu/drm/tegra/drm.h | 5 +++++ drivers/gpu/drm/tegra/dsi.c | 7 ++++++- drivers/gpu/drm/tegra/hdmi.c | 8 +++++++- drivers/gpu/drm/tegra/sor.c | 7 ++++++- 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c index 4df39112e38e..c80d1329f082 100644 --- a/drivers/gpu/drm/tegra/dc.c +++ b/drivers/gpu/drm/tegra/dc.c @@ -1416,7 +1416,7 @@ static int tegra_dc_show_regs(struct seq_file *s, void *data) #define DUMP_REG(name) \ seq_printf(s, "%-40s %#05x %08x\n", #name, name, \ - tegra_dc_readl(dc, name)) + tegra_dc_readl_notrace(dc, name)) DUMP_REG(DC_CMD_GENERAL_INCR_SYNCPT); DUMP_REG(DC_CMD_GENERAL_INCR_SYNCPT_CNTRL); diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h index 063f5d397526..308d61729a9f 100644 --- a/drivers/gpu/drm/tegra/drm.h +++ b/drivers/gpu/drm/tegra/drm.h @@ -188,6 +188,11 @@ static inline u32 tegra_dc_readl(struct tegra_dc *dc, unsigned int offset) return value; } +static inline u32 tegra_dc_readl_notrace(struct tegra_dc *dc, unsigned int offset) +{ + return readl(dc->regs + (offset << 2)); +} + struct tegra_dc_window { struct { unsigned int x; diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c index 046649ec9441..fe731d88198b 100644 --- a/drivers/gpu/drm/tegra/dsi.c +++ b/drivers/gpu/drm/tegra/dsi.c @@ -115,6 +115,11 @@ static inline u32 tegra_dsi_readl(struct tegra_dsi *dsi, unsigned int offset) return value; } +static inline u32 tegra_dsi_readl_notrace(struct tegra_dsi *dsi, unsigned int offset) +{ + return readl(dsi->regs + (offset << 2)); +} + static inline void tegra_dsi_writel(struct tegra_dsi *dsi, u32 value, unsigned int offset) { @@ -139,7 +144,7 @@ static int tegra_dsi_show_regs(struct seq_file *s, void *data) #define DUMP_REG(name) \ seq_printf(s, "%-32s %#05x %08x\n", #name, name, \ - tegra_dsi_readl(dsi, name)) + tegra_dsi_readl_notrace(dsi, name)) DUMP_REG(DSI_INCR_SYNCPT); DUMP_REG(DSI_INCR_SYNCPT_CONTROL); diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c index 5b9d83b71943..3be5f1709585 100644 --- a/drivers/gpu/drm/tegra/hdmi.c +++ b/drivers/gpu/drm/tegra/hdmi.c @@ -110,6 +110,12 @@ static inline u32 tegra_hdmi_readl(struct tegra_hdmi *hdmi, return value; } +static inline u32 tegra_hdmi_readl_notrace(struct tegra_hdmi *hdmi, + unsigned int offset) +{ + return readl(hdmi->regs + (offset << 2)); +} + static inline void tegra_hdmi_writel(struct tegra_hdmi *hdmi, u32 value, unsigned int offset) { @@ -1239,7 +1245,7 @@ static int tegra_hdmi_show_regs(struct seq_file *s, void *data) #define DUMP_REG(name) \ seq_printf(s, "%-56s %#05x %08x\n", #name, name, \ - tegra_hdmi_readl(hdmi, name)) + tegra_hdmi_readl_notrace(hdmi, name)) DUMP_REG(HDMI_CTXSW); DUMP_REG(HDMI_NV_PDISP_SOR_STATE0); diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c index 7ab1d1dc7cd7..910d49f6c5d2 100644 --- a/drivers/gpu/drm/tegra/sor.c +++ b/drivers/gpu/drm/tegra/sor.c @@ -242,6 +242,11 @@ static inline u32 tegra_sor_readl(struct tegra_sor *sor, unsigned int offset) return value; } +static inline u32 tegra_sor_readl_notrace(struct tegra_sor *sor, unsigned int offset) +{ + return readl(sor->regs + (offset << 2)); +} + static inline void tegra_sor_writel(struct tegra_sor *sor, u32 value, unsigned int offset) { @@ -1120,7 +1125,7 @@ static int tegra_sor_show_regs(struct seq_file *s, void *data) #define DUMP_REG(name) \ seq_printf(s, "%-38s %#05x %08x\n", #name, name, \ - tegra_sor_readl(sor, name)) + tegra_sor_readl_notrace(sor, name)) DUMP_REG(SOR_CTXSW); DUMP_REG(SOR_SUPER_STATE0);