From ac74e8b618b056e37e56eb2a907f09e1caab52a0 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 7 May 2016 21:56:34 +0200 Subject: [PATCH] 3.14-stable patches added patches: compiler-gcc-disable-ftracer-for-__noclone-functions.patch compiler-gcc-integrate-the-various-compiler-gcc.h-files.patch x86-llvmlinux-fix-incomplete-type-const-struct-x86cpu_device_id.patch --- ...able-ftracer-for-__noclone-functions.patch | 43 +++ ...ate-the-various-compiler-gcc.h-files.patch | 353 ++++++++++++++++++ queue-3.14/series | 3 + ...e-type-const-struct-x86cpu_device_id.patch | 77 ++++ 4 files changed, 476 insertions(+) create mode 100644 queue-3.14/compiler-gcc-disable-ftracer-for-__noclone-functions.patch create mode 100644 queue-3.14/compiler-gcc-integrate-the-various-compiler-gcc.h-files.patch create mode 100644 queue-3.14/x86-llvmlinux-fix-incomplete-type-const-struct-x86cpu_device_id.patch diff --git a/queue-3.14/compiler-gcc-disable-ftracer-for-__noclone-functions.patch b/queue-3.14/compiler-gcc-disable-ftracer-for-__noclone-functions.patch new file mode 100644 index 00000000000..50290150e4b --- /dev/null +++ b/queue-3.14/compiler-gcc-disable-ftracer-for-__noclone-functions.patch @@ -0,0 +1,43 @@ +From 95272c29378ee7dc15f43fa2758cb28a5913a06d Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Thu, 31 Mar 2016 09:38:51 +0200 +Subject: compiler-gcc: disable -ftracer for __noclone functions + +From: Paolo Bonzini + +commit 95272c29378ee7dc15f43fa2758cb28a5913a06d upstream. + +-ftracer can duplicate asm blocks causing compilation to fail in +noclone functions. For example, KVM declares a global variable +in an asm like + + asm("2: ... \n + .pushsection data \n + .global vmx_return \n + vmx_return: .long 2b"); + +and -ftracer causes a double declaration. + +Cc: Andrew Morton +Cc: Michal Marek +Cc: stable@vger.kernel.org +Cc: kvm@vger.kernel.org +Reported-by: Linda Walsh +Signed-off-by: Paolo Bonzini +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/compiler-gcc.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/include/linux/compiler-gcc.h ++++ b/include/linux/compiler-gcc.h +@@ -177,7 +177,7 @@ + #define unreachable() __builtin_unreachable() + + /* Mark a function definition as prohibited from being cloned. */ +-#define __noclone __attribute__((__noclone__)) ++#define __noclone __attribute__((__noclone__, __optimize__("no-tracer"))) + + #endif /* GCC_VERSION >= 40500 */ + diff --git a/queue-3.14/compiler-gcc-integrate-the-various-compiler-gcc.h-files.patch b/queue-3.14/compiler-gcc-integrate-the-various-compiler-gcc.h-files.patch new file mode 100644 index 00000000000..d16f0f3b106 --- /dev/null +++ b/queue-3.14/compiler-gcc-integrate-the-various-compiler-gcc.h-files.patch @@ -0,0 +1,353 @@ +From f320793e52aee78f0fbb8bcaf10e6614d2e67bfc Mon Sep 17 00:00:00 2001 +From: Joe Perches +Date: Thu, 25 Jun 2015 15:01:02 -0700 +Subject: compiler-gcc: integrate the various compiler-gcc[345].h files + +From: Joe Perches + +commit f320793e52aee78f0fbb8bcaf10e6614d2e67bfc upstream. + +[ Upstream commit cb984d101b30eb7478d32df56a0023e4603cba7f ] + +As gcc major version numbers are going to advance rather rapidly in the +future, there's no real value in separate files for each compiler +version. + +Deduplicate some of the macros #defined in each file too. + +Neaten comments using normal kernel commenting style. + +Signed-off-by: Joe Perches +Cc: Andi Kleen +Cc: Michal Marek +Cc: Segher Boessenkool +Cc: Sasha Levin +Cc: Anton Blanchard +Cc: Alan Modra +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/compiler-gcc.h | 120 ++++++++++++++++++++++++++++++++++++++++-- + include/linux/compiler-gcc3.h | 23 -------- + include/linux/compiler-gcc4.h | 88 ------------------------------ + include/linux/compiler-gcc5.h | 66 ----------------------- + 4 files changed, 116 insertions(+), 181 deletions(-) + +--- a/include/linux/compiler-gcc.h ++++ b/include/linux/compiler-gcc.h +@@ -100,10 +100,122 @@ + #define __maybe_unused __attribute__((unused)) + #define __always_unused __attribute__((unused)) + +-#define __gcc_header(x) #x +-#define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h) +-#define gcc_header(x) _gcc_header(x) +-#include gcc_header(__GNUC__) ++/* gcc version specific checks */ ++ ++#if GCC_VERSION < 30200 ++# error Sorry, your compiler is too old - please upgrade it. ++#endif ++ ++#if GCC_VERSION < 30300 ++# define __used __attribute__((__unused__)) ++#else ++# define __used __attribute__((__used__)) ++#endif ++ ++#ifdef CONFIG_GCOV_KERNEL ++# if GCC_VERSION < 30400 ++# error "GCOV profiling support for gcc versions below 3.4 not included" ++# endif /* __GNUC_MINOR__ */ ++#endif /* CONFIG_GCOV_KERNEL */ ++ ++#if GCC_VERSION >= 30400 ++#define __must_check __attribute__((warn_unused_result)) ++#endif ++ ++#if GCC_VERSION >= 40000 ++ ++/* GCC 4.1.[01] miscompiles __weak */ ++#ifdef __KERNEL__ ++# if GCC_VERSION >= 40100 && GCC_VERSION <= 40101 ++# error Your version of gcc miscompiles the __weak directive ++# endif ++#endif ++ ++#define __used __attribute__((__used__)) ++#define __compiler_offsetof(a, b) \ ++ __builtin_offsetof(a, b) ++ ++#if GCC_VERSION >= 40100 && GCC_VERSION < 40600 ++# define __compiletime_object_size(obj) __builtin_object_size(obj, 0) ++#endif ++ ++#if GCC_VERSION >= 40300 ++/* Mark functions as cold. gcc will assume any path leading to a call ++ * to them will be unlikely. This means a lot of manual unlikely()s ++ * are unnecessary now for any paths leading to the usual suspects ++ * like BUG(), printk(), panic() etc. [but let's keep them for now for ++ * older compilers] ++ * ++ * Early snapshots of gcc 4.3 don't support this and we can't detect this ++ * in the preprocessor, but we can live with this because they're unreleased. ++ * Maketime probing would be overkill here. ++ * ++ * gcc also has a __attribute__((__hot__)) to move hot functions into ++ * a special section, but I don't see any sense in this right now in ++ * the kernel context ++ */ ++#define __cold __attribute__((__cold__)) ++ ++#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) ++ ++#ifndef __CHECKER__ ++# define __compiletime_warning(message) __attribute__((warning(message))) ++# define __compiletime_error(message) __attribute__((error(message))) ++#endif /* __CHECKER__ */ ++#endif /* GCC_VERSION >= 40300 */ ++ ++#if GCC_VERSION >= 40500 ++/* ++ * Mark a position in code as unreachable. This can be used to ++ * suppress control flow warnings after asm blocks that transfer ++ * control elsewhere. ++ * ++ * Early snapshots of gcc 4.5 don't support this and we can't detect ++ * this in the preprocessor, but we can live with this because they're ++ * unreleased. Really, we need to have autoconf for the kernel. ++ */ ++#define unreachable() __builtin_unreachable() ++ ++/* Mark a function definition as prohibited from being cloned. */ ++#define __noclone __attribute__((__noclone__)) ++ ++#endif /* GCC_VERSION >= 40500 */ ++ ++#if GCC_VERSION >= 40600 ++/* ++ * Tell the optimizer that something else uses this function or variable. ++ */ ++#define __visible __attribute__((externally_visible)) ++#endif ++ ++/* ++ * GCC 'asm goto' miscompiles certain code sequences: ++ * ++ * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670 ++ * ++ * Work it around via a compiler barrier quirk suggested by Jakub Jelinek. ++ * ++ * (asm goto is automatically volatile - the naming reflects this.) ++ */ ++#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0) ++ ++#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP ++#if GCC_VERSION >= 40400 ++#define __HAVE_BUILTIN_BSWAP32__ ++#define __HAVE_BUILTIN_BSWAP64__ ++#endif ++#if GCC_VERSION >= 40800 || (defined(__powerpc__) && GCC_VERSION >= 40600) ++#define __HAVE_BUILTIN_BSWAP16__ ++#endif ++#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */ ++ ++#if GCC_VERSION >= 50000 ++#define KASAN_ABI_VERSION 4 ++#elif GCC_VERSION >= 40902 ++#define KASAN_ABI_VERSION 3 ++#endif ++ ++#endif /* gcc version >= 40000 specific checks */ + + #if !defined(__noclone) + #define __noclone /* not needed */ +--- a/include/linux/compiler-gcc3.h ++++ /dev/null +@@ -1,23 +0,0 @@ +-#ifndef __LINUX_COMPILER_H +-#error "Please don't include directly, include instead." +-#endif +- +-#if GCC_VERSION < 30200 +-# error Sorry, your compiler is too old - please upgrade it. +-#endif +- +-#if GCC_VERSION >= 30300 +-# define __used __attribute__((__used__)) +-#else +-# define __used __attribute__((__unused__)) +-#endif +- +-#if GCC_VERSION >= 30400 +-#define __must_check __attribute__((warn_unused_result)) +-#endif +- +-#ifdef CONFIG_GCOV_KERNEL +-# if GCC_VERSION < 30400 +-# error "GCOV profiling support for gcc versions below 3.4 not included" +-# endif /* __GNUC_MINOR__ */ +-#endif /* CONFIG_GCOV_KERNEL */ +--- a/include/linux/compiler-gcc4.h ++++ /dev/null +@@ -1,88 +0,0 @@ +-#ifndef __LINUX_COMPILER_H +-#error "Please don't include directly, include instead." +-#endif +- +-/* GCC 4.1.[01] miscompiles __weak */ +-#ifdef __KERNEL__ +-# if GCC_VERSION >= 40100 && GCC_VERSION <= 40101 +-# error Your version of gcc miscompiles the __weak directive +-# endif +-#endif +- +-#define __used __attribute__((__used__)) +-#define __must_check __attribute__((warn_unused_result)) +-#define __compiler_offsetof(a,b) __builtin_offsetof(a,b) +- +-#if GCC_VERSION >= 40100 && GCC_VERSION < 40600 +-# define __compiletime_object_size(obj) __builtin_object_size(obj, 0) +-#endif +- +-#if GCC_VERSION >= 40300 +-/* Mark functions as cold. gcc will assume any path leading to a call +- to them will be unlikely. This means a lot of manual unlikely()s +- are unnecessary now for any paths leading to the usual suspects +- like BUG(), printk(), panic() etc. [but let's keep them for now for +- older compilers] +- +- Early snapshots of gcc 4.3 don't support this and we can't detect this +- in the preprocessor, but we can live with this because they're unreleased. +- Maketime probing would be overkill here. +- +- gcc also has a __attribute__((__hot__)) to move hot functions into +- a special section, but I don't see any sense in this right now in +- the kernel context */ +-#define __cold __attribute__((__cold__)) +- +-#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) +- +-#ifndef __CHECKER__ +-# define __compiletime_warning(message) __attribute__((warning(message))) +-# define __compiletime_error(message) __attribute__((error(message))) +-#endif /* __CHECKER__ */ +-#endif /* GCC_VERSION >= 40300 */ +- +-#if GCC_VERSION >= 40500 +-/* +- * Mark a position in code as unreachable. This can be used to +- * suppress control flow warnings after asm blocks that transfer +- * control elsewhere. +- * +- * Early snapshots of gcc 4.5 don't support this and we can't detect +- * this in the preprocessor, but we can live with this because they're +- * unreleased. Really, we need to have autoconf for the kernel. +- */ +-#define unreachable() __builtin_unreachable() +- +-/* Mark a function definition as prohibited from being cloned. */ +-#define __noclone __attribute__((__noclone__)) +- +-#endif /* GCC_VERSION >= 40500 */ +- +-#if GCC_VERSION >= 40600 +-/* +- * Tell the optimizer that something else uses this function or variable. +- */ +-#define __visible __attribute__((externally_visible)) +-#endif +- +-/* +- * GCC 'asm goto' miscompiles certain code sequences: +- * +- * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670 +- * +- * Work it around via a compiler barrier quirk suggested by Jakub Jelinek. +- * Fixed in GCC 4.8.2 and later versions. +- * +- * (asm goto is automatically volatile - the naming reflects this.) +- */ +-#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0) +- +-#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP +-#if GCC_VERSION >= 40400 +-#define __HAVE_BUILTIN_BSWAP32__ +-#define __HAVE_BUILTIN_BSWAP64__ +-#endif +-#if GCC_VERSION >= 40800 || (defined(__powerpc__) && GCC_VERSION >= 40600) +-#define __HAVE_BUILTIN_BSWAP16__ +-#endif +-#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */ +--- a/include/linux/compiler-gcc5.h ++++ /dev/null +@@ -1,66 +0,0 @@ +-#ifndef __LINUX_COMPILER_H +-#error "Please don't include directly, include instead." +-#endif +- +-#define __used __attribute__((__used__)) +-#define __must_check __attribute__((warn_unused_result)) +-#define __compiler_offsetof(a, b) __builtin_offsetof(a, b) +- +-/* Mark functions as cold. gcc will assume any path leading to a call +- to them will be unlikely. This means a lot of manual unlikely()s +- are unnecessary now for any paths leading to the usual suspects +- like BUG(), printk(), panic() etc. [but let's keep them for now for +- older compilers] +- +- Early snapshots of gcc 4.3 don't support this and we can't detect this +- in the preprocessor, but we can live with this because they're unreleased. +- Maketime probing would be overkill here. +- +- gcc also has a __attribute__((__hot__)) to move hot functions into +- a special section, but I don't see any sense in this right now in +- the kernel context */ +-#define __cold __attribute__((__cold__)) +- +-#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) +- +-#ifndef __CHECKER__ +-# define __compiletime_warning(message) __attribute__((warning(message))) +-# define __compiletime_error(message) __attribute__((error(message))) +-#endif /* __CHECKER__ */ +- +-/* +- * Mark a position in code as unreachable. This can be used to +- * suppress control flow warnings after asm blocks that transfer +- * control elsewhere. +- * +- * Early snapshots of gcc 4.5 don't support this and we can't detect +- * this in the preprocessor, but we can live with this because they're +- * unreleased. Really, we need to have autoconf for the kernel. +- */ +-#define unreachable() __builtin_unreachable() +- +-/* Mark a function definition as prohibited from being cloned. */ +-#define __noclone __attribute__((__noclone__)) +- +-/* +- * Tell the optimizer that something else uses this function or variable. +- */ +-#define __visible __attribute__((externally_visible)) +- +-/* +- * GCC 'asm goto' miscompiles certain code sequences: +- * +- * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670 +- * +- * Work it around via a compiler barrier quirk suggested by Jakub Jelinek. +- * Fixed in GCC 4.8.2 and later versions. +- * +- * (asm goto is automatically volatile - the naming reflects this.) +- */ +-#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0) +- +-#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP +-#define __HAVE_BUILTIN_BSWAP32__ +-#define __HAVE_BUILTIN_BSWAP64__ +-#define __HAVE_BUILTIN_BSWAP16__ +-#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */ diff --git a/queue-3.14/series b/queue-3.14/series index 38b11e08060..866ef9b43a6 100644 --- a/queue-3.14/series +++ b/queue-3.14/series @@ -1,3 +1,6 @@ +compiler-gcc-integrate-the-various-compiler-gcc.h-files.patch +compiler-gcc-disable-ftracer-for-__noclone-functions.patch +x86-llvmlinux-fix-incomplete-type-const-struct-x86cpu_device_id.patch ipvs-correct-initial-offset-of-call-id-header-search-in-sip-persistence-engine.patch nbd-ratelimit-error-msgs-after-socket-close.patch clk-versatile-sp810-support-reentrance.patch diff --git a/queue-3.14/x86-llvmlinux-fix-incomplete-type-const-struct-x86cpu_device_id.patch b/queue-3.14/x86-llvmlinux-fix-incomplete-type-const-struct-x86cpu_device_id.patch new file mode 100644 index 00000000000..a02115cb2a0 --- /dev/null +++ b/queue-3.14/x86-llvmlinux-fix-incomplete-type-const-struct-x86cpu_device_id.patch @@ -0,0 +1,77 @@ +From c4586256f0c440bc2bdb29d2cbb915f0ca785d26 Mon Sep 17 00:00:00 2001 +From: Behan Webster +Date: Thu, 13 Feb 2014 12:21:48 -0800 +Subject: x86: LLVMLinux: Fix "incomplete type const struct x86cpu_device_id" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Behan Webster + +commit c4586256f0c440bc2bdb29d2cbb915f0ca785d26 upstream. + +Similar to the fix in 40413dcb7b273bda681dca38e6ff0bbb3728ef11 + +MODULE_DEVICE_TABLE(x86cpu, ...) expects the struct to be called struct +x86cpu_device_id, and not struct x86_cpu_id which is what is used in the rest +of the kernel code. Although gcc seems to ignore this error, clang fails +without this define to fix the name. + +Code from drivers/thermal/x86_pkg_temp_thermal.c +static const struct x86_cpu_id __initconst pkg_temp_thermal_ids[] = { ... }; +MODULE_DEVICE_TABLE(x86cpu, pkg_temp_thermal_ids); + +Error from clang: +drivers/thermal/x86_pkg_temp_thermal.c:577:1: error: variable has + incomplete type 'const struct x86cpu_device_id' +MODULE_DEVICE_TABLE(x86cpu, pkg_temp_thermal_ids); +^ +include/linux/module.h:145:3: note: expanded from macro + 'MODULE_DEVICE_TABLE' + MODULE_GENERIC_TABLE(type##_device, name) + ^ +include/linux/module.h:87:32: note: expanded from macro + 'MODULE_GENERIC_TABLE' +extern const struct gtype##_id __mod_##gtype##_table \ + ^ +:143:1: note: expanded from here +__mod_x86cpu_device_table +^ +drivers/thermal/x86_pkg_temp_thermal.c:577:1: note: forward declaration of + 'struct x86cpu_device_id' +include/linux/module.h:145:3: note: expanded from macro + 'MODULE_DEVICE_TABLE' + MODULE_GENERIC_TABLE(type##_device, name) + ^ +include/linux/module.h:87:21: note: expanded from macro + 'MODULE_GENERIC_TABLE' +extern const struct gtype##_id __mod_##gtype##_table \ + ^ +:141:1: note: expanded from here +x86cpu_device_id +^ +1 error generated. + +Signed-off-by: Behan Webster +Signed-off-by: Jan-Simon Möller +Acked-by: Greg Kroah-Hartman +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/mod_devicetable.h | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/include/linux/mod_devicetable.h ++++ b/include/linux/mod_devicetable.h +@@ -548,6 +548,11 @@ struct amba_id { + * See documentation of "x86_match_cpu" for details. + */ + ++/* ++ * MODULE_DEVICE_TABLE expects this struct to be called x86cpu_device_id. ++ * Although gcc seems to ignore this error, clang fails without this define. ++ */ ++#define x86cpu_device_id x86_cpu_id + struct x86_cpu_id { + __u16 vendor; + __u16 family; -- 2.47.2