forked from mirrors/linux
		
	The motivation for commit abb2ea7dfd ("compiler, clang: suppress
warning for unused static inline functions") was to suppress clang's
warnings about unused static inline functions.
For configs without CONFIG_OPTIMIZE_INLINING enabled, such as any non-x86
architecture, `inline' in the kernel implies that
__attribute__((always_inline)) is used.
Some code depends on that behavior, see
  https://lkml.org/lkml/2017/6/13/918:
  net/built-in.o: In function `__xchg_mb':
  arch/arm64/include/asm/cmpxchg.h:99: undefined reference to `__compiletime_assert_99'
  arch/arm64/include/asm/cmpxchg.h:99: undefined reference to `__compiletime_assert_99
The full fix would be to identify these breakages and annotate the
functions with __always_inline instead of `inline'.  But since we are
late in the 4.12-rc cycle, simply carry forward the forced inlining
behavior and work toward moving arm64, and other architectures, toward
CONFIG_OPTIMIZE_INLINING behavior.
Link: http://lkml.kernel.org/r/alpine.DEB.2.10.1706261552200.1075@chino.kir.corp.google.com
Signed-off-by: David Rientjes <rientjes@google.com>
Reported-by: Sodagudi Prasad <psodagud@codeaurora.org>
Tested-by: Sodagudi Prasad <psodagud@codeaurora.org>
Tested-by: Matthias Kaehlcke <mka@chromium.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
	
			
		
			
				
	
	
		
			17 lines
		
	
	
	
		
			525 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			17 lines
		
	
	
	
		
			525 B
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef __LINUX_COMPILER_H
 | 
						|
#error "Please don't include <linux/compiler-clang.h> directly, include <linux/compiler.h> instead."
 | 
						|
#endif
 | 
						|
 | 
						|
/* Some compiler specific definitions are overwritten here
 | 
						|
 * for Clang compiler
 | 
						|
 */
 | 
						|
 | 
						|
#ifdef uninitialized_var
 | 
						|
#undef uninitialized_var
 | 
						|
#define uninitialized_var(x) x = *(&(x))
 | 
						|
#endif
 | 
						|
 | 
						|
/* same as gcc, this was present in clang-2.6 so we can assume it works
 | 
						|
 * with any version that can compile the kernel
 | 
						|
 */
 | 
						|
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
 |