All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nathan Chancellor <nathan@kernel.org>
To: Jani Nikula <jani.nikula@linux.intel.com>
Cc: LiangCheng Wang <zaq14760@gmail.com>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
	Nick Desaulniers <nick.desaulniers+lkml@gmail.com>,
	Bill Wendling <morbo@google.com>,
	Justin Stitt <justinstitt@google.com>,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	llvm@lists.linux.dev, kernel test robot <lkp@intel.com>
Subject: Re: [PATCH] drm/tiny: pixpaper: Prevent inlining of send helpers to reduce stack usage
Date: Fri, 31 Oct 2025 16:34:46 -0400	[thread overview]
Message-ID: <20251031203446.GD2486902@ax162> (raw)
In-Reply-To: <0d9e5bf4036dc0706fac603764276d2327d0bc69@intel.com>

On Fri, Oct 31, 2025 at 10:40:13AM +0200, Jani Nikula wrote:
> On Fri, 31 Oct 2025, LiangCheng Wang <zaq14760@gmail.com> wrote:
> > Clang reports that pixpaper_panel_hw_init() exceeds the 8 KB stack
> > frame limit:
> >
> >     drivers/gpu/drm/tiny/pixpaper.c:579:12: warning:
> >       stack frame size (20024) exceeds limit (8192)
> >       in 'pixpaper_panel_hw_init'
> >
> > This warning occurs because the compiler aggressively inlines
> > pixpaper_send_cmd() and pixpaper_send_data() into
> > pixpaper_panel_hw_init(), which inflates the estimated stack usage.
> >
> > Mark these two helper functions as 'noinline' to prevent inlining.
> > This significantly reduces the reported stack usage without changing
> > runtime behavior.
> >
> > Reported-by: kernel test robot <lkp@intel.com>
> > Closes: https://lore.kernel.org/oe-kbuild-all/202510270858.1GzE6iQg-lkp@intel.com/
> > Fixes: c9e70639f591 ("drm: tiny: Add support for Mayqueen Pixpaper e-ink panel")
> > Signed-off-by: LiangCheng Wang <zaq14760@gmail.com>
> > ---
> > When building with Clang and frame size warnings enabled
> > (-Wframe-larger-than=8192), the compiler reports that
> > pixpaper_panel_hw_init() consumes over 20 KB of stack space:
> >
> >     drivers/gpu/drm/tiny/pixpaper.c:579:12: warning:
> >       stack frame size (20024) exceeds limit (8192)
> >       in 'pixpaper_panel_hw_init'
> >
> > This happens because Clang aggressively inlines
> > pixpaper_send_cmd() and pixpaper_send_data() into
> > pixpaper_panel_hw_init(), causing the calculated stack usage
> > to balloon far beyond the warning threshold.
> >
> > The fix is straightforward: mark these two helper functions as
> > 'noinline' to prevent inlining. This reduces the reported stack
> > usage to within normal limits without changing runtime behavior.
> 
> I really *really* wish we wouldn't have to go this route at all.
> 
> But if we have to, I think noinline_for_stack is the keyword to use.

For what it's worth, the configuration in the report linked above has
CONFIG_KASAN_STACK=y, which is known to be broken with clang and
requires !COMPILE_TEST to even select it (which the robot should be
using to avoid pathological cases such as this). If I disable
CONFIG_KASAN_STACK, there is no warning even with a 1024 byte limit, so
realistically, I think we can just leave this be.

Cheers,
Nathan

> > ---
> >  drivers/gpu/drm/tiny/pixpaper.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/tiny/pixpaper.c b/drivers/gpu/drm/tiny/pixpaper.c
> > index 32598fb2fee7fcdea3ea0696c2bf54404fcffa2e..70e3239adfd0f86f92551991872486380489fb9b 100644
> > --- a/drivers/gpu/drm/tiny/pixpaper.c
> > +++ b/drivers/gpu/drm/tiny/pixpaper.c
> > @@ -536,7 +536,7 @@ static void pixpaper_spi_sync(struct spi_device *spi, struct spi_message *msg,
> >  		err->errno_code = ret;
> >  }
> >  
> > -static void pixpaper_send_cmd(struct pixpaper_panel *panel, u8 cmd,
> > +static noinline void pixpaper_send_cmd(struct pixpaper_panel *panel, u8 cmd,
> >  			      struct pixpaper_error_ctx *err)
> >  {
> >  	if (err->errno_code)
> > @@ -556,7 +556,7 @@ static void pixpaper_send_cmd(struct pixpaper_panel *panel, u8 cmd,
> >  	pixpaper_spi_sync(panel->spi, &msg, err);
> >  }
> >  
> > -static void pixpaper_send_data(struct pixpaper_panel *panel, u8 data,
> > +static noinline void pixpaper_send_data(struct pixpaper_panel *panel, u8 data,
> >  			       struct pixpaper_error_ctx *err)
> >  {
> >  	if (err->errno_code)
> >
> > ---
> > base-commit: d127176862a93c4b3216bda533d2bee170af5e71
> > change-id: 20251031-fix_202510270858-2e4643b00545
> >
> > Best regards,
> 
> -- 
> Jani Nikula, Intel

  reply	other threads:[~2025-10-31 20:34 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-31  8:06 [PATCH] drm/tiny: pixpaper: Prevent inlining of send helpers to reduce stack usage LiangCheng Wang
2025-10-31  8:40 ` Jani Nikula
2025-10-31 20:34   ` Nathan Chancellor [this message]
2025-11-03 12:24     ` LiangCheng Wang

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=20251031203446.GD2486902@ax162 \
    --to=nathan@kernel.org \
    --cc=airlied@gmail.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jani.nikula@linux.intel.com \
    --cc=justinstitt@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkp@intel.com \
    --cc=llvm@lists.linux.dev \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=morbo@google.com \
    --cc=mripard@kernel.org \
    --cc=nick.desaulniers+lkml@gmail.com \
    --cc=simona@ffwll.ch \
    --cc=tzimmermann@suse.de \
    --cc=zaq14760@gmail.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.