diff mbox series

[07/12] Compiler Attributes: remove unneeded sparse (__CHECKER__) tests

Message ID 20180903203316.16183-8-miguel.ojeda.sandonis@gmail.com (mailing list archive)
State Not Applicable, archived
Headers show
Series Compiler Attributes | expand

Commit Message

Miguel Ojeda Sept. 3, 2018, 8:33 p.m. UTC
Sparse knows about a few more attributes now, so we can remove
the __CHECKER__ conditions from them (which, in turn, allow us
to move some of them later on to compiler_attributes.h).

  * assume_aligned: since sparse's commit ffc860b ("sparse:
    ignore __assume_aligned__ attribute"), included in 0.5.1

  * error: since sparse's commit 0a04210 ("sparse: Add 'error'
    to ignored attributes"), included in 0.5.0

  * hotpatch: since sparse's commit 6043210 ("sparse/parse.c:
    ignore hotpatch attribute"), included in 0.5.1

  * warning: since sparse's commit 977365d ("Avoid "attribute
    'warning': unknown attribute" warning"), included in 0.4.2

On top of that, __must_be_array does not need it either because:

  * Even ancient versions of sparse do not have a problem

  * BUILD_BUG_ON_ZERO() is currently disabled for __CHECKER__

Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: Eli Friedman <efriedma@codeaurora.org>
Cc: Christopher Li <sparse@chrisli.org>
Cc: Kees Cook <keescook@chromium.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
Cc: Joe Perches <joe@perches.com>
Cc: Dominique Martinet <asmadeus@codewreck.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-sparse@vger.kernel.org
Acked-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
---
 include/linux/compiler-gcc.h   | 6 ++----
 include/linux/compiler.h       | 4 ----
 include/linux/compiler_types.h | 2 +-
 3 files changed, 3 insertions(+), 9 deletions(-)

Comments

Luc Van Oostenryck Sept. 5, 2018, 6:20 p.m. UTC | #1
On Mon, Sep 03, 2018 at 10:33:11PM +0200, Miguel Ojeda wrote:
> Sparse knows about a few more attributes now, so we can remove
> the __CHECKER__ conditions from them (which, in turn, allow us
> to move some of them later on to compiler_attributes.h).
> 
>   * assume_aligned: since sparse's commit ffc860b ("sparse:
>     ignore __assume_aligned__ attribute"), included in 0.5.1
> 
>   * error: since sparse's commit 0a04210 ("sparse: Add 'error'
>     to ignored attributes"), included in 0.5.0
> 
>   * hotpatch: since sparse's commit 6043210 ("sparse/parse.c:
>     ignore hotpatch attribute"), included in 0.5.1
> 
>   * warning: since sparse's commit 977365d ("Avoid "attribute
>     'warning': unknown attribute" warning"), included in 0.4.2

Hi,

I hadn't noticed in the previous version but I see now that hotpatch
& assume_aligned is only available since sparse 0.5.1 which is only
13 months old. It would be great if everyone use a recent version
but I fear that a lot of people still use something less recent.
v0.5.0 should be OK, though, it's more than 5 years old.

Sorry for not having noticed this earlier.

-- Luc
Josh Triplett Sept. 5, 2018, 7:30 p.m. UTC | #2
On Wed, Sep 05, 2018 at 08:20:39PM +0200, Luc Van Oostenryck wrote:
> On Mon, Sep 03, 2018 at 10:33:11PM +0200, Miguel Ojeda wrote:
> > Sparse knows about a few more attributes now, so we can remove
> > the __CHECKER__ conditions from them (which, in turn, allow us
> > to move some of them later on to compiler_attributes.h).
> > 
> >   * assume_aligned: since sparse's commit ffc860b ("sparse:
> >     ignore __assume_aligned__ attribute"), included in 0.5.1
> > 
> >   * error: since sparse's commit 0a04210 ("sparse: Add 'error'
> >     to ignored attributes"), included in 0.5.0
> > 
> >   * hotpatch: since sparse's commit 6043210 ("sparse/parse.c:
> >     ignore hotpatch attribute"), included in 0.5.1
> > 
> >   * warning: since sparse's commit 977365d ("Avoid "attribute
> >     'warning': unknown attribute" warning"), included in 0.4.2
> 
> Hi,
> 
> I hadn't noticed in the previous version but I see now that hotpatch
> & assume_aligned is only available since sparse 0.5.1 which is only
> 13 months old. It would be great if everyone use a recent version
> but I fear that a lot of people still use something less recent.
> v0.5.0 should be OK, though, it's more than 5 years old.
> 
> Sorry for not having noticed this earlier.

Unlike GCC, I don't think it's at all unreasonable to assume a
*relatively* recent version of Sparse.

(Once we start assuming a version with __has_attribute support, this
will get even easier to handle.)
Linus Torvalds Sept. 5, 2018, 7:40 p.m. UTC | #3
On Wed, Sep 5, 2018 at 12:30 PM Josh Triplett <josh@joshtriplett.org> wrote:
>
> Unlike GCC, I don't think it's at all unreasonable to assume a
> *relatively* recent version of Sparse.

Yeah, sparse is small and easy to build and installs in your own
~/bin/ directory by default.

Anybody who can build the kernel can trivially fetch and build sparse
in seconds.  It literally builds from scratch in 2.5s for me.

I don't think you even need any development packages that you don't
already need for the kernel. Just a C compiler and libc, basically.

Sure, some parts of sparse can use things like libxml and llvm and
even gtk, but that's for functionality that the "check kernel with
sparse" doesn't even need, and the makefile will automatically disable
them if you don't have it installed.

So if people are having trouble, just point them to the sparse repo,
and tell them that

    git clone ...
    cd sparse
    make -j8
    make install

fixes the issue in 30 seconds.

Although maybe I'm misstating just how easy sparse is to build and
install, and people have had problems?

                 Linus
Luc Van Oostenryck Sept. 5, 2018, 7:49 p.m. UTC | #4
On Wed, Sep 05, 2018 at 12:40:26PM -0700, Linus Torvalds wrote:
> On Wed, Sep 5, 2018 at 12:30 PM Josh Triplett <josh@joshtriplett.org> wrote:
> >
> > Unlike GCC, I don't think it's at all unreasonable to assume a
> > *relatively* recent version of Sparse.
> 
> Yeah, sparse is small and easy to build and installs in your own
> ~/bin/ directory by default.
> 
> Anybody who can build the kernel can trivially fetch and build sparse
> in seconds.  It literally builds from scratch in 2.5s for me.
> 
> I don't think you even need any development packages that you don't
> already need for the kernel. Just a C compiler and libc, basically.
> 
> Sure, some parts of sparse can use things like libxml and llvm and
> even gtk, but that's for functionality that the "check kernel with
> sparse" doesn't even need, and the makefile will automatically disable
> them if you don't have it installed.
> 
> So if people are having trouble, just point them to the sparse repo,
> and tell them that
> 
>     git clone ...
>     cd sparse
>     make -j8
>     make install
> 
> fixes the issue in 30 seconds.
> 
> Although maybe I'm misstating just how easy sparse is to build and
> install, and people have had problems?
> 

I never heard of anyone having a problem to build sparse but I
guess that a lot of people just use their distro's version.

That said, I'm of course, all for encouraging people to upgrad
to a recent version.


-- Luc
diff mbox series

Patch

diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index 3b32bbfa5a49..1ca6a51cfaa9 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -76,14 +76,12 @@ 
 
 #define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
 
-#ifndef __CHECKER__
 #define __compiletime_warning(message) __attribute__((__warning__(message)))
 #define __compiletime_error(message) __attribute__((__error__(message)))
 
-#ifdef LATENT_ENTROPY_PLUGIN
+#if defined(LATENT_ENTROPY_PLUGIN) && !defined(__CHECKER__)
 #define __latent_entropy __attribute__((latent_entropy))
 #endif
-#endif /* __CHECKER__ */
 
 /*
  * calling noreturn functions, __builtin_unreachable() and __builtin_trap()
@@ -131,7 +129,7 @@ 
 
 /* gcc version specific checks */
 
-#if GCC_VERSION >= 40900 && !defined(__CHECKER__)
+#if GCC_VERSION >= 40900
 /*
  * __assume_aligned(n, k): Tell the optimizer that the returned
  * pointer can be assumed to be k modulo n. The second argument is
diff --git a/include/linux/compiler.h b/include/linux/compiler.h
index 165b1d5683ed..4030a2940d6b 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -357,11 +357,7 @@  static inline void *offset_to_ptr(const int *off)
 	compiletime_assert(__native_word(t),				\
 		"Need native word sized stores/loads for atomicity.")
 
-#ifdef __CHECKER__
-#define __must_be_array(a)	0
-#else
 /* &a[0] degrades to a pointer: a different type from an array */
 #define __must_be_array(a)	BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
-#endif
 
 #endif /* __LINUX_COMPILER_H */
diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
index f182f2ef3227..65b10b1e2a59 100644
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -217,7 +217,7 @@  struct ftrace_likely_data {
 #define __must_check
 #endif
 
-#if defined(CC_USING_HOTPATCH) && !defined(__CHECKER__)
+#if defined(CC_USING_HOTPATCH)
 #define notrace			__attribute__((hotpatch(0, 0)))
 #else
 #define notrace			__attribute__((__no_instrument_function__))