From: Kees Cook <keescook@chromium.org>
To: Joe Perches <joe@perches.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
apw@canonical.com, Christoph Lameter <cl@linux.com>,
Daniel Micay <danielmicay@gmail.com>,
Dennis Zhou <dennis@kernel.org>,
dwaipayanray1@gmail.com, Joonsoo Kim <iamjoonsoo.kim@lge.com>,
Linux-MM <linux-mm@kvack.org>,
Lukas Bulwahn <lukas.bulwahn@gmail.com>,
mm-commits@vger.kernel.org, Nathan Chancellor <nathan@kernel.org>,
Nick Desaulniers <ndesaulniers@google.com>,
Miguel Ojeda <ojeda@kernel.org>,
Pekka Enberg <penberg@kernel.org>,
David Rientjes <rientjes@google.com>, Tejun Heo <tj@kernel.org>,
Vlastimil Babka <vbabka@suse.cz>,
linux-doc@vger.kernel.org
Subject: Re: function prototype element ordering
Date: Fri, 24 Sep 2021 12:43:38 -0700 [thread overview]
Message-ID: <202109241238.13C92BA004@keescook> (raw)
In-Reply-To: <0b1c78b395a7a198a089ba8f6283d8d10829720c.camel@perches.com>
On Tue, Sep 21, 2021 at 09:24:04PM -0700, Joe Perches wrote:
> On Tue, 2021-09-21 at 19:25 -0700, Kees Cook wrote:
> > [...]
> > Looking through what was written before[1] and through examples in the
> > source tree, I find the following categories:
> >
> > 1- storage class: static extern inline __always_inline
> > 2- storage class attributes/hints/???: __init __cold
> > 3- return type: void *
> > 4- return type attributes: __must_check __noreturn __assume_aligned(n)
> > 5- function attributes: __attribute_const__ __malloc
> > 6- function argument attributes: __printf(n, m) __alloc_size(n)
> >
> > Everyone seems to basically agree on:
> >
> > [storage class] [return type] [return type attributes] [name]([arg1type] [arg1name], ...)
> >
> > There is a lot of disagreement over where 5 and 6 should fit in above. And
> > there is a lot of confusion over 4 (mixed between before and after the
> > function name) and 2 (see below).
> >
> > What's currently blocking me is that 6 cannot go after the function
> > (for definitions) because it angers GCC (see quoted bit above), but 5
> > can (e.g. __attribute_const__).
> >
> > Another inconsistency seems to be 2 (mainly section markings like
> > __init). Sometimes it's after the storage class and sometimes after the
> > return type, but it certainly feels more like a storage class than a
> > return type attribute:
> >
> > $ git grep 'static __init int' | wc -l
> > 349
> > $ git grep 'static int __init' | wc -l
> > 8402
> >
> > But it's clearly positioned like a return type attribute in most of the
> > tree. What's correct?
>
> Neither really. 'Correct' is such a difficult concept.
> 'Preferred' might be better.
Right -- I expect it to be a guideline.
> btw: there are about another 100 other uses with '__init' as the
> initial attribute, mostly in trace.
Hah, yeah.
> And I still think that return type attributes like __init, which is
> just a __section define, should go before the function storage class
> and ideally on a separate line to simplify the parsing of the actual
> function declaration. Attributes like __section, __aligned, __cold,
> etc... don't have much value when looking up a function definition.
>
> > Regardless, given the constraints above, it seems like what Linus may
> > want is (on "one line", though it will get wrapped in pathological cases
> > like kmem_cache_alloc_node_trace):
>
> Pathological is pretty common these days as the function name length
> is rather longer now than earlier times.
Agreed!
> > [storage class] [storage class attributes] [return type] [return type attributes] [function argument attributes] [name]([arg1type] [arg1name], ...) [function attributes]
> >
> > Joe appears to want (on two lines):
> >
> > [storage class attributes] [function attributes] [function argument attributes]
> > [storage class] [return type] [return type attributes] [name]([arg1type] [arg1name], ...)
>
> I would put [return type attributes] on the initial separate line
> even though that's not the most common use today.
I found a few other people wanting separate lines too, so at the risk of
annoying Linus, I guess I'll attempt this (again).
> > I would just like to have an arrangement that won't get NAKed by
> > someone. ;)
>
> Bikeshed building dreamer...
I just want to know the right place to put stuff. :P
> But IMO the desire here is to ask for a bit more uniformity, not
> require it.
Yeah.
--
Kees Cook
next prev parent reply other threads:[~2021-09-24 19:43 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-10 3:09 incoming Andrew Morton
2021-09-10 3:10 ` [patch 1/9] mm: move kvmalloc-related functions to slab.h Andrew Morton
2021-09-10 3:10 ` [patch 2/9] rapidio: avoid bogus __alloc_size warning Andrew Morton
2021-09-10 3:10 ` [patch 3/9] Compiler Attributes: add __alloc_size() for better bounds checking Andrew Morton
2021-09-10 3:10 ` [patch 4/9] checkpatch: add __alloc_size() to known $Attribute Andrew Morton
2021-09-10 3:10 ` [patch 5/9] slab: clean up function declarations Andrew Morton
2021-09-10 3:10 ` [patch 6/9] slab: add __alloc_size attributes for better bounds checking Andrew Morton
2021-09-10 3:10 ` [patch 7/9] mm/page_alloc: " Andrew Morton
2021-09-10 3:10 ` [patch 8/9] percpu: " Andrew Morton
2021-09-10 3:10 ` [patch 9/9] mm/vmalloc: " Andrew Morton
2021-09-10 17:23 ` Linus Torvalds
2021-09-10 18:43 ` Kees Cook
2021-09-10 19:17 ` Linus Torvalds
2021-09-10 19:32 ` Kees Cook
2021-09-10 19:49 ` Nick Desaulniers
2021-09-10 20:16 ` Linus Torvalds
2021-09-10 20:47 ` Kees Cook
2021-09-10 20:58 ` Nick Desaulniers
2021-09-10 21:07 ` Kees Cook
2021-09-11 5:29 ` Joe Perches
2021-09-21 23:37 ` Kees Cook
2021-09-21 23:45 ` Joe Perches
2021-09-22 2:25 ` function prototype element ordering Kees Cook
2021-09-22 4:24 ` Joe Perches
2021-09-24 19:43 ` Kees Cook [this message]
2021-09-22 7:24 ` Alexey Dobriyan
2021-09-22 8:51 ` Joe Perches
2021-09-22 10:45 ` Alexey Dobriyan
2021-09-22 11:19 ` Jani Nikula
2021-09-22 21:15 ` Linus Torvalds
2021-09-23 5:10 ` Joe Perches
2021-09-25 19:40 ` David Laight
2021-09-26 21:03 ` Linus Torvalds
2021-09-27 8:21 ` David Laight
2021-09-27 9:22 ` Willy Tarreau
2021-09-10 17:11 ` incoming Kees Cook
2021-09-10 20:13 ` incoming Kees Cook
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=202109241238.13C92BA004@keescook \
--to=keescook@chromium.org \
--cc=akpm@linux-foundation.org \
--cc=apw@canonical.com \
--cc=cl@linux.com \
--cc=danielmicay@gmail.com \
--cc=dennis@kernel.org \
--cc=dwaipayanray1@gmail.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=joe@perches.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lukas.bulwahn@gmail.com \
--cc=mm-commits@vger.kernel.org \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=ojeda@kernel.org \
--cc=penberg@kernel.org \
--cc=rientjes@google.com \
--cc=tj@kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=vbabka@suse.cz \
/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.