From: Sam Ravnborg <sam@ravnborg.org>
To: Arnd Bergmann <arnd@arndb.de>
Cc: Oleksandr Natalenko <oleksandr@redhat.com>,
David Airlie <airlied@linux.ie>,
Tomi Valkeinen <tomi.valkeinen@ti.com>,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
Thierry Reding <thierry.reding@gmail.com>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Boris Brezillon <boris.brezillon@collabora.com>
Subject: Re: [PATCH] [v2] drm: panel: fix excessive stack usage in td028ttec1_prepare
Date: Sun, 12 Jan 2020 21:19:27 +0100 [thread overview]
Message-ID: <20200112201927.GA24849@ravnborg.org> (raw)
In-Reply-To: <20200108135116.3687988-1-arnd@arndb.de>
Hi Arnd.
On Wed, Jan 08, 2020 at 02:51:05PM +0100, Arnd Bergmann wrote:
> With gcc -O3 in combination with the structleak plug, the compiler can
> inline very aggressively, leading to rather large stack usage:
>
> drivers/gpu/drm/panel/panel-tpo-td028ttec1.c: In function 'td028ttec1_prepare':
> drivers/gpu/drm/panel/panel-tpo-td028ttec1.c:233:1: error: the frame size of 2768 bytes is larger than 2048 bytes [-Werror=frame-larger-than=]
> }
>
> Marking jbt_reg_write_*() as noinline avoids the case where
> multiple instances of this function get inlined into the same
> stack frame and each one adds a copy of 'tx_buf'.
>
> The compiler is clearly making some bad decisions here, but I
> did not open a new bug report as this only happens in combination
> with the structleak plugin.
>
> Link: https://lore.kernel.org/lkml/CAK8P3a3jAnFZA3GFRtdYdg1-i-oih3pOQzkkrK-X3BGsFrMiZQ@mail.gmail.com/
> Fixes: mmtom ("init/Kconfig: enable -O3 for all arches")
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> v2:
> - mark all three functions as noinlien
> - add code comment
> - add link to more detailed analysis
Thanks for the updated patch.
Applied to drm-misc-next.
Sam
> ---
> drivers/gpu/drm/panel/panel-tpo-td028ttec1.c | 13 ++++++++++---
> 1 file changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-tpo-td028ttec1.c b/drivers/gpu/drm/panel/panel-tpo-td028ttec1.c
> index cf29405a2dbe..5034db8b55de 100644
> --- a/drivers/gpu/drm/panel/panel-tpo-td028ttec1.c
> +++ b/drivers/gpu/drm/panel/panel-tpo-td028ttec1.c
> @@ -86,7 +86,12 @@ struct td028ttec1_panel {
>
> #define to_td028ttec1_device(p) container_of(p, struct td028ttec1_panel, panel)
>
> -static int jbt_ret_write_0(struct td028ttec1_panel *lcd, u8 reg, int *err)
> +/*
> + * noinline_for_stack so we don't get multiple copies of tx_buf
> + * on the stack in case of gcc-plugin-structleak
> + */
> +static int noinline_for_stack
> +jbt_ret_write_0(struct td028ttec1_panel *lcd, u8 reg, int *err)
> {
> struct spi_device *spi = lcd->spi;
> u16 tx_buf = JBT_COMMAND | reg;
> @@ -105,7 +110,8 @@ static int jbt_ret_write_0(struct td028ttec1_panel *lcd, u8 reg, int *err)
> return ret;
> }
>
> -static int jbt_reg_write_1(struct td028ttec1_panel *lcd,
> +static int noinline_for_stack
> +jbt_reg_write_1(struct td028ttec1_panel *lcd,
> u8 reg, u8 data, int *err)
> {
> struct spi_device *spi = lcd->spi;
> @@ -128,7 +134,8 @@ static int jbt_reg_write_1(struct td028ttec1_panel *lcd,
> return ret;
> }
>
> -static int jbt_reg_write_2(struct td028ttec1_panel *lcd,
> +static int noinline_for_stack
> +jbt_reg_write_2(struct td028ttec1_panel *lcd,
> u8 reg, u16 data, int *err)
> {
> struct spi_device *spi = lcd->spi;
> --
> 2.20.0
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
WARNING: multiple messages have this Message-ID (diff)
From: Sam Ravnborg <sam@ravnborg.org>
To: Arnd Bergmann <arnd@arndb.de>
Cc: Thierry Reding <thierry.reding@gmail.com>,
David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>,
Oleksandr Natalenko <oleksandr@redhat.com>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Linus Walleij <linus.walleij@linaro.org>,
Tomi Valkeinen <tomi.valkeinen@ti.com>,
Boris Brezillon <boris.brezillon@collabora.com>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] [v2] drm: panel: fix excessive stack usage in td028ttec1_prepare
Date: Sun, 12 Jan 2020 21:19:27 +0100 [thread overview]
Message-ID: <20200112201927.GA24849@ravnborg.org> (raw)
In-Reply-To: <20200108135116.3687988-1-arnd@arndb.de>
Hi Arnd.
On Wed, Jan 08, 2020 at 02:51:05PM +0100, Arnd Bergmann wrote:
> With gcc -O3 in combination with the structleak plug, the compiler can
> inline very aggressively, leading to rather large stack usage:
>
> drivers/gpu/drm/panel/panel-tpo-td028ttec1.c: In function 'td028ttec1_prepare':
> drivers/gpu/drm/panel/panel-tpo-td028ttec1.c:233:1: error: the frame size of 2768 bytes is larger than 2048 bytes [-Werror=frame-larger-than=]
> }
>
> Marking jbt_reg_write_*() as noinline avoids the case where
> multiple instances of this function get inlined into the same
> stack frame and each one adds a copy of 'tx_buf'.
>
> The compiler is clearly making some bad decisions here, but I
> did not open a new bug report as this only happens in combination
> with the structleak plugin.
>
> Link: https://lore.kernel.org/lkml/CAK8P3a3jAnFZA3GFRtdYdg1-i-oih3pOQzkkrK-X3BGsFrMiZQ@mail.gmail.com/
> Fixes: mmtom ("init/Kconfig: enable -O3 for all arches")
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> v2:
> - mark all three functions as noinlien
> - add code comment
> - add link to more detailed analysis
Thanks for the updated patch.
Applied to drm-misc-next.
Sam
> ---
> drivers/gpu/drm/panel/panel-tpo-td028ttec1.c | 13 ++++++++++---
> 1 file changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-tpo-td028ttec1.c b/drivers/gpu/drm/panel/panel-tpo-td028ttec1.c
> index cf29405a2dbe..5034db8b55de 100644
> --- a/drivers/gpu/drm/panel/panel-tpo-td028ttec1.c
> +++ b/drivers/gpu/drm/panel/panel-tpo-td028ttec1.c
> @@ -86,7 +86,12 @@ struct td028ttec1_panel {
>
> #define to_td028ttec1_device(p) container_of(p, struct td028ttec1_panel, panel)
>
> -static int jbt_ret_write_0(struct td028ttec1_panel *lcd, u8 reg, int *err)
> +/*
> + * noinline_for_stack so we don't get multiple copies of tx_buf
> + * on the stack in case of gcc-plugin-structleak
> + */
> +static int noinline_for_stack
> +jbt_ret_write_0(struct td028ttec1_panel *lcd, u8 reg, int *err)
> {
> struct spi_device *spi = lcd->spi;
> u16 tx_buf = JBT_COMMAND | reg;
> @@ -105,7 +110,8 @@ static int jbt_ret_write_0(struct td028ttec1_panel *lcd, u8 reg, int *err)
> return ret;
> }
>
> -static int jbt_reg_write_1(struct td028ttec1_panel *lcd,
> +static int noinline_for_stack
> +jbt_reg_write_1(struct td028ttec1_panel *lcd,
> u8 reg, u8 data, int *err)
> {
> struct spi_device *spi = lcd->spi;
> @@ -128,7 +134,8 @@ static int jbt_reg_write_1(struct td028ttec1_panel *lcd,
> return ret;
> }
>
> -static int jbt_reg_write_2(struct td028ttec1_panel *lcd,
> +static int noinline_for_stack
> +jbt_reg_write_2(struct td028ttec1_panel *lcd,
> u8 reg, u16 data, int *err)
> {
> struct spi_device *spi = lcd->spi;
> --
> 2.20.0
next prev parent reply other threads:[~2020-01-12 20:19 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-08 13:51 [PATCH] [v2] drm: panel: fix excessive stack usage in td028ttec1_prepare Arnd Bergmann
2020-01-08 13:51 ` Arnd Bergmann
2020-01-12 20:19 ` Sam Ravnborg [this message]
2020-01-12 20:19 ` Sam Ravnborg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200112201927.GA24849@ravnborg.org \
--to=sam@ravnborg.org \
--cc=airlied@linux.ie \
--cc=arnd@arndb.de \
--cc=boris.brezillon@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=oleksandr@redhat.com \
--cc=thierry.reding@gmail.com \
--cc=tomi.valkeinen@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.