From: Arvind Sankar <nivedita@alum.mit.edu>
To: Nick Desaulniers <ndesaulniers@google.com>
Cc: Arvind Sankar <nivedita@alum.mit.edu>,
Arnd Bergmann <arnd@arndb.de>, "S, Shirish" <sshankar@amd.com>,
"Wentland, Harry" <Harry.Wentland@amd.com>,
"Deucher, Alexander" <Alexander.Deucher@amd.com>,
"yshuiv7@gmail.com" <yshuiv7@gmail.com>,
"andrew.cooper3@citrix.com" <andrew.cooper3@citrix.com>,
clang-built-linux <clang-built-linux@googlegroups.com>,
Matthias Kaehlcke <mka@google.com>,
"S, Shirish" <Shirish.S@amd.com>,
"Zhou, David(ChunMing)" <David1.Zhou@amd.com>,
"Koenig, Christian" <Christian.Koenig@amd.com>,
amd-gfx list <amd-gfx@lists.freedesktop.org>,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: AMDGPU and 16B stack alignment
Date: Wed, 16 Oct 2019 14:55:00 -0400 [thread overview]
Message-ID: <20191016185500.GA2674383@rani> (raw)
In-Reply-To: <CAKwvOd=yGXMwdoxKCD2gcEgevozf41jVmqCkW7CU=Xvd7mqtjw@mail.gmail.com>
On Tue, Oct 15, 2019 at 06:51:26PM -0700, Nick Desaulniers wrote:
> On Tue, Oct 15, 2019 at 1:26 PM Arvind Sankar <nivedita@alum.mit.edu> wrote:
> >
> > On Tue, Oct 15, 2019 at 11:05:56AM -0700, Nick Desaulniers wrote:
> > > Hmmm...I would have liked to remove it outright, as it is an ABI
> > > mismatch that is likely to result in instability and non-fun-to-debug
> > > runtime issues in the future. I suspect my patch does work for GCC
> > > 7.1+. The question is: Do we want to either:
> > > 1. mark AMDGPU broken for GCC < 7.1, or
> > > 2. continue supporting it via stack alignment mismatch?
> > >
> > > 2 is brittle, and may break at any point in the future, but if it's
> > > working for someone it does make me feel bad to outright disable it.
> > > What I'd image 2 looks like is (psuedo code in a Makefile):
> > >
> > > if CC_IS_GCC && GCC_VERSION < 7.1:
> > > set stack alignment to 16B and hope for the best
> > >
> > > So my diff would be amended to keep the stack alignment flags, but
> > > only to support GCC < 7.1. And that assumes my change compiles with
> > > GCC 7.1+. (Looks like it does for me locally with GCC 8.3, but I would
> > > feel even more confident if someone with hardware to test on and GCC
> > > 7.1+ could boot test).
> > > --
> > > Thanks,
> > > ~Nick Desaulniers
> >
> > If we do keep it, would adding -mstackrealign make it more robust?
> > That's simple and will only add the alignment to functions that require
> > 16-byte alignment (at least on gcc).
>
> I think there's also `-mincoming-stack-boundary=`.
> https://github.com/ClangBuiltLinux/linux/issues/735#issuecomment-540038017
Yes, but -mstackrealign looks like it's supported by clang as well.
>
> >
> > Alternative is to use
> > __attribute__((force_align_arg_pointer)) on functions that might be
> > called from 8-byte-aligned code.
>
> Which is hard to automate and easy to forget. Likely a large diff to fix today.
Right, this is a no-go, esp to just fix old compilers.
>
> >
> > It looks like -mstackrealign should work from gcc 5.3 onwards.
>
> The kernel would generally like to support GCC 4.9+.
>
> There's plenty of different ways to keep layering on duct tape and
> bailing wire to support differing ABIs, but that's just adding
> technical debt that will have to be repaid one day. That's why the
> cleanest solution IMO is mark the driver broken for old toolchains,
> and use a code-base-consistent stack alignment. Bending over
> backwards to support old toolchains means accepting stack alignment
> mismatches, which is in the "unspecified behavior" ring of the
> "undefined behavior" Venn diagram. I have the same opinion on relying
> on explicitly undefined behavior.
>
> I'll send patches for fixing up Clang, but please consider my strong
> advice to generally avoid stack alignment mismatches, regardless of
> compiler.
> --
> Thanks,
> ~Nick Desaulniers
What I suggested was in reference to your proposal for dropping the
-mpreferred-stack-boundary=4 for modern compilers, but keeping it for
<7.1. -mstackrealign would at least let 5.3 onwards be less likely to
break (and it doesn't error before then, I think it just doesn't
actually do anything, so no worse than now at least).
Simply dropping support for <7.1 would be cleanest, yes, but it sounds
like people don't want to go that far.
next prev parent reply other threads:[~2019-10-16 18:55 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-14 22:22 AMDGPU and 16B stack alignment Nick Desaulniers
[not found] ` <CAKwvOdnDVe-dahZGnRtzMrx-AH_C+2Lf20qjFQHNtn9xh=Okzw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-10-15 7:08 ` S, Shirish
2019-10-15 7:19 ` Arnd Bergmann
2019-10-15 10:48 ` David Laight
2019-10-15 18:05 ` Nick Desaulniers
2019-10-15 18:11 ` Nick Desaulniers
[not found] ` <CAKwvOdnLxm_tZ_qR1D-BE64Z3QaMC2h79ooobdRVAzmCD_2_Sg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-10-15 18:30 ` Alex Deucher
2019-10-15 18:30 ` Alex Deucher
2019-10-15 20:15 ` Nick Desaulniers
2019-10-15 20:26 ` Arvind Sankar
2019-10-16 1:51 ` Nick Desaulniers
2019-10-16 18:55 ` Arvind Sankar [this message]
2019-10-16 23:05 ` Nick Desaulniers
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=20191016185500.GA2674383@rani \
--to=nivedita@alum.mit.edu \
--cc=Alexander.Deucher@amd.com \
--cc=Christian.Koenig@amd.com \
--cc=David1.Zhou@amd.com \
--cc=Harry.Wentland@amd.com \
--cc=Shirish.S@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=andrew.cooper3@citrix.com \
--cc=arnd@arndb.de \
--cc=clang-built-linux@googlegroups.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mka@google.com \
--cc=ndesaulniers@google.com \
--cc=sshankar@amd.com \
--cc=yshuiv7@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.