From: Greg Kroah-Hartman Date: Thu, 23 Sep 2021 09:04:27 +0000 (+0200) Subject: 5.10-stable patches X-Git-Tag: v4.4.285~54 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f7f4f080b68dba3dc43215e055b653fb18e67d1d;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: arm-9077-1-plt-move-struct-plt_entries-definition-to-header.patch arm-9078-1-add-warn-suppress-parameter-to-arm_gen_branch_link.patch arm-9079-1-ftrace-add-module_plts-support.patch arm-9098-1-ftrace-module_plt-fix-build-problem-without-dynamic_ftrace.patch --- diff --git a/queue-5.10/arm-9077-1-plt-move-struct-plt_entries-definition-to-header.patch b/queue-5.10/arm-9077-1-plt-move-struct-plt_entries-definition-to-header.patch new file mode 100644 index 00000000000..76fa3aca0d8 --- /dev/null +++ b/queue-5.10/arm-9077-1-plt-move-struct-plt_entries-definition-to-header.patch @@ -0,0 +1,66 @@ +From foo@baz Thu Sep 23 11:03:54 AM CEST 2021 +From: Florian Fainelli +Date: Wed, 22 Sep 2021 09:59:55 -0700 +Subject: ARM: 9077/1: PLT: Move struct plt_entries definition to header +To: linux-kernel@vger.kernel.org +Cc: stable@vger.kernel.org, Greg Kroah-Hartman , Sasha Levin , Alex Sverdlin , Russell King , Florian Fainelli , Steven Rostedt , Ingo Molnar , Russell King , linux-arm-kernel@lists.infradead.org (moderated list:ARM PORT) +Message-ID: <20210922165958.189843-2-f.fainelli@gmail.com> + +From: Alex Sverdlin + +commit 4e271701c17dee70c6e1351c4d7d42e70405c6a9 upstream upstream + +No functional change, later it will be re-used in several files. + +Signed-off-by: Alexander Sverdlin +Signed-off-by: Russell King +Signed-off-by: Florian Fainelli +Signed-off-by: Greg Kroah-Hartman +--- + arch/arm/include/asm/module.h | 9 +++++++++ + arch/arm/kernel/module-plts.c | 9 --------- + 2 files changed, 9 insertions(+), 9 deletions(-) + +--- a/arch/arm/include/asm/module.h ++++ b/arch/arm/include/asm/module.h +@@ -19,6 +19,15 @@ enum { + }; + #endif + ++#define PLT_ENT_STRIDE L1_CACHE_BYTES ++#define PLT_ENT_COUNT (PLT_ENT_STRIDE / sizeof(u32)) ++#define PLT_ENT_SIZE (sizeof(struct plt_entries) / PLT_ENT_COUNT) ++ ++struct plt_entries { ++ u32 ldr[PLT_ENT_COUNT]; ++ u32 lit[PLT_ENT_COUNT]; ++}; ++ + struct mod_plt_sec { + struct elf32_shdr *plt; + int plt_count; +--- a/arch/arm/kernel/module-plts.c ++++ b/arch/arm/kernel/module-plts.c +@@ -12,10 +12,6 @@ + #include + #include + +-#define PLT_ENT_STRIDE L1_CACHE_BYTES +-#define PLT_ENT_COUNT (PLT_ENT_STRIDE / sizeof(u32)) +-#define PLT_ENT_SIZE (sizeof(struct plt_entries) / PLT_ENT_COUNT) +- + #ifdef CONFIG_THUMB2_KERNEL + #define PLT_ENT_LDR __opcode_to_mem_thumb32(0xf8dff000 | \ + (PLT_ENT_STRIDE - 4)) +@@ -24,11 +20,6 @@ + (PLT_ENT_STRIDE - 8)) + #endif + +-struct plt_entries { +- u32 ldr[PLT_ENT_COUNT]; +- u32 lit[PLT_ENT_COUNT]; +-}; +- + static bool in_init(const struct module *mod, unsigned long loc) + { + return loc - (u32)mod->init_layout.base < mod->init_layout.size; diff --git a/queue-5.10/arm-9078-1-add-warn-suppress-parameter-to-arm_gen_branch_link.patch b/queue-5.10/arm-9078-1-add-warn-suppress-parameter-to-arm_gen_branch_link.patch new file mode 100644 index 00000000000..17ed78a6b8e --- /dev/null +++ b/queue-5.10/arm-9078-1-add-warn-suppress-parameter-to-arm_gen_branch_link.patch @@ -0,0 +1,117 @@ +From foo@baz Thu Sep 23 11:03:54 AM CEST 2021 +From: Florian Fainelli +Date: Wed, 22 Sep 2021 09:59:56 -0700 +Subject: ARM: 9078/1: Add warn suppress parameter to arm_gen_branch_link() +To: linux-kernel@vger.kernel.org +Cc: stable@vger.kernel.org, Greg Kroah-Hartman , Sasha Levin , Alex Sverdlin , Russell King , Florian Fainelli , Steven Rostedt , Ingo Molnar , Russell King , linux-arm-kernel@lists.infradead.org (moderated list:ARM PORT) +Message-ID: <20210922165958.189843-3-f.fainelli@gmail.com> + +From: Alex Sverdlin + +commit 890cb057a46d323fd8c77ebecb6485476614cd21 upstream + +Will be used in the following patch. No functional change. + +Signed-off-by: Alexander Sverdlin +Signed-off-by: Russell King +Signed-off-by: Florian Fainelli +Signed-off-by: Greg Kroah-Hartman +--- + arch/arm/include/asm/insn.h | 8 ++++---- + arch/arm/kernel/ftrace.c | 2 +- + arch/arm/kernel/insn.c | 19 ++++++++++--------- + 3 files changed, 15 insertions(+), 14 deletions(-) + +--- a/arch/arm/include/asm/insn.h ++++ b/arch/arm/include/asm/insn.h +@@ -13,18 +13,18 @@ arm_gen_nop(void) + } + + unsigned long +-__arm_gen_branch(unsigned long pc, unsigned long addr, bool link); ++__arm_gen_branch(unsigned long pc, unsigned long addr, bool link, bool warn); + + static inline unsigned long + arm_gen_branch(unsigned long pc, unsigned long addr) + { +- return __arm_gen_branch(pc, addr, false); ++ return __arm_gen_branch(pc, addr, false, true); + } + + static inline unsigned long +-arm_gen_branch_link(unsigned long pc, unsigned long addr) ++arm_gen_branch_link(unsigned long pc, unsigned long addr, bool warn) + { +- return __arm_gen_branch(pc, addr, true); ++ return __arm_gen_branch(pc, addr, true, warn); + } + + #endif +--- a/arch/arm/kernel/ftrace.c ++++ b/arch/arm/kernel/ftrace.c +@@ -70,7 +70,7 @@ int ftrace_arch_code_modify_post_process + + static unsigned long ftrace_call_replace(unsigned long pc, unsigned long addr) + { +- return arm_gen_branch_link(pc, addr); ++ return arm_gen_branch_link(pc, addr, true); + } + + static int ftrace_modify_code(unsigned long pc, unsigned long old, +--- a/arch/arm/kernel/insn.c ++++ b/arch/arm/kernel/insn.c +@@ -3,8 +3,9 @@ + #include + #include + +-static unsigned long +-__arm_gen_branch_thumb2(unsigned long pc, unsigned long addr, bool link) ++static unsigned long __arm_gen_branch_thumb2(unsigned long pc, ++ unsigned long addr, bool link, ++ bool warn) + { + unsigned long s, j1, j2, i1, i2, imm10, imm11; + unsigned long first, second; +@@ -12,7 +13,7 @@ __arm_gen_branch_thumb2(unsigned long pc + + offset = (long)addr - (long)(pc + 4); + if (offset < -16777216 || offset > 16777214) { +- WARN_ON_ONCE(1); ++ WARN_ON_ONCE(warn); + return 0; + } + +@@ -33,8 +34,8 @@ __arm_gen_branch_thumb2(unsigned long pc + return __opcode_thumb32_compose(first, second); + } + +-static unsigned long +-__arm_gen_branch_arm(unsigned long pc, unsigned long addr, bool link) ++static unsigned long __arm_gen_branch_arm(unsigned long pc, unsigned long addr, ++ bool link, bool warn) + { + unsigned long opcode = 0xea000000; + long offset; +@@ -44,7 +45,7 @@ __arm_gen_branch_arm(unsigned long pc, u + + offset = (long)addr - (long)(pc + 8); + if (unlikely(offset < -33554432 || offset > 33554428)) { +- WARN_ON_ONCE(1); ++ WARN_ON_ONCE(warn); + return 0; + } + +@@ -54,10 +55,10 @@ __arm_gen_branch_arm(unsigned long pc, u + } + + unsigned long +-__arm_gen_branch(unsigned long pc, unsigned long addr, bool link) ++__arm_gen_branch(unsigned long pc, unsigned long addr, bool link, bool warn) + { + if (IS_ENABLED(CONFIG_THUMB2_KERNEL)) +- return __arm_gen_branch_thumb2(pc, addr, link); ++ return __arm_gen_branch_thumb2(pc, addr, link, warn); + else +- return __arm_gen_branch_arm(pc, addr, link); ++ return __arm_gen_branch_arm(pc, addr, link, warn); + } diff --git a/queue-5.10/arm-9079-1-ftrace-add-module_plts-support.patch b/queue-5.10/arm-9079-1-ftrace-add-module_plts-support.patch new file mode 100644 index 00000000000..601687a29b0 --- /dev/null +++ b/queue-5.10/arm-9079-1-ftrace-add-module_plts-support.patch @@ -0,0 +1,274 @@ +From foo@baz Thu Sep 23 11:03:54 AM CEST 2021 +From: Florian Fainelli +Date: Wed, 22 Sep 2021 09:59:57 -0700 +Subject: ARM: 9079/1: ftrace: Add MODULE_PLTS support +To: linux-kernel@vger.kernel.org +Cc: stable@vger.kernel.org, Greg Kroah-Hartman , Sasha Levin , Alex Sverdlin , Russell King , Florian Fainelli , Steven Rostedt , Ingo Molnar , Russell King , linux-arm-kernel@lists.infradead.org (moderated list:ARM PORT) +Message-ID: <20210922165958.189843-4-f.fainelli@gmail.com> + +From: Alex Sverdlin + +commit 79f32b221b18c15a98507b101ef4beb52444cc6f upstream + +Teach ftrace_make_call() and ftrace_make_nop() about PLTs. +Teach PLT code about FTRACE and all its callbacks. +Otherwise the following might happen: + +------------[ cut here ]------------ +WARNING: CPU: 14 PID: 2265 at .../arch/arm/kernel/insn.c:14 __arm_gen_branch+0x83/0x8c() +... +Hardware name: LSI Axxia AXM55XX +[] (unwind_backtrace) from [] (show_stack+0x11/0x14) +[] (show_stack) from [] (dump_stack+0x81/0xa8) +[] (dump_stack) from [] (warn_slowpath_common+0x69/0x90) +[] (warn_slowpath_common) from [] (warn_slowpath_null+0x17/0x1c) +[] (warn_slowpath_null) from [] (__arm_gen_branch+0x83/0x8c) +[] (__arm_gen_branch) from [] (ftrace_make_nop+0xf/0x24) +[] (ftrace_make_nop) from [] (ftrace_process_locs+0x27b/0x3e8) +[] (ftrace_process_locs) from [] (load_module+0x11e9/0x1a44) +[] (load_module) from [] (SyS_finit_module+0x59/0x84) +[] (SyS_finit_module) from [] (ret_fast_syscall+0x1/0x18) +---[ end trace e1b64ced7a89adcc ]--- +------------[ cut here ]------------ +WARNING: CPU: 14 PID: 2265 at .../kernel/trace/ftrace.c:1979 ftrace_bug+0x1b1/0x234() +... +Hardware name: LSI Axxia AXM55XX +[] (unwind_backtrace) from [] (show_stack+0x11/0x14) +[] (show_stack) from [] (dump_stack+0x81/0xa8) +[] (dump_stack) from [] (warn_slowpath_common+0x69/0x90) +[] (warn_slowpath_common) from [] (warn_slowpath_null+0x17/0x1c) +[] (warn_slowpath_null) from [] (ftrace_bug+0x1b1/0x234) +[] (ftrace_bug) from [] (ftrace_process_locs+0x285/0x3e8) +[] (ftrace_process_locs) from [] (load_module+0x11e9/0x1a44) +[] (load_module) from [] (SyS_finit_module+0x59/0x84) +[] (SyS_finit_module) from [] (ret_fast_syscall+0x1/0x18) +---[ end trace e1b64ced7a89adcd ]--- +ftrace failed to modify [] 0xe9ef7006 +actual: 02:f0:3b:fa +ftrace record flags: 0 +(0) expected tramp: c0314265 + +Signed-off-by: Alexander Sverdlin +Signed-off-by: Russell King +Signed-off-by: Florian Fainelli +Signed-off-by: Greg Kroah-Hartman +--- + arch/arm/include/asm/ftrace.h | 3 ++ + arch/arm/include/asm/module.h | 1 + arch/arm/kernel/ftrace.c | 46 ++++++++++++++++++++++++++++++++++-------- + arch/arm/kernel/module-plts.c | 44 ++++++++++++++++++++++++++++++++++++---- + 4 files changed, 82 insertions(+), 12 deletions(-) + +--- a/arch/arm/include/asm/ftrace.h ++++ b/arch/arm/include/asm/ftrace.h +@@ -15,6 +15,9 @@ extern void __gnu_mcount_nc(void); + + #ifdef CONFIG_DYNAMIC_FTRACE + struct dyn_arch_ftrace { ++#ifdef CONFIG_ARM_MODULE_PLTS ++ struct module *mod; ++#endif + }; + + static inline unsigned long ftrace_call_adjust(unsigned long addr) +--- a/arch/arm/include/asm/module.h ++++ b/arch/arm/include/asm/module.h +@@ -30,6 +30,7 @@ struct plt_entries { + + struct mod_plt_sec { + struct elf32_shdr *plt; ++ struct plt_entries *plt_ent; + int plt_count; + }; + +--- a/arch/arm/kernel/ftrace.c ++++ b/arch/arm/kernel/ftrace.c +@@ -68,9 +68,10 @@ int ftrace_arch_code_modify_post_process + return 0; + } + +-static unsigned long ftrace_call_replace(unsigned long pc, unsigned long addr) ++static unsigned long ftrace_call_replace(unsigned long pc, unsigned long addr, ++ bool warn) + { +- return arm_gen_branch_link(pc, addr, true); ++ return arm_gen_branch_link(pc, addr, warn); + } + + static int ftrace_modify_code(unsigned long pc, unsigned long old, +@@ -104,14 +105,14 @@ int ftrace_update_ftrace_func(ftrace_fun + int ret; + + pc = (unsigned long)&ftrace_call; +- new = ftrace_call_replace(pc, (unsigned long)func); ++ new = ftrace_call_replace(pc, (unsigned long)func, true); + + ret = ftrace_modify_code(pc, 0, new, false); + + #ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS + if (!ret) { + pc = (unsigned long)&ftrace_regs_call; +- new = ftrace_call_replace(pc, (unsigned long)func); ++ new = ftrace_call_replace(pc, (unsigned long)func, true); + + ret = ftrace_modify_code(pc, 0, new, false); + } +@@ -124,10 +125,22 @@ int ftrace_make_call(struct dyn_ftrace * + { + unsigned long new, old; + unsigned long ip = rec->ip; ++ unsigned long aaddr = adjust_address(rec, addr); ++ struct module *mod = NULL; ++ ++#ifdef CONFIG_ARM_MODULE_PLTS ++ mod = rec->arch.mod; ++#endif + + old = ftrace_nop_replace(rec); + +- new = ftrace_call_replace(ip, adjust_address(rec, addr)); ++ new = ftrace_call_replace(ip, aaddr, !mod); ++#ifdef CONFIG_ARM_MODULE_PLTS ++ if (!new && mod) { ++ aaddr = get_module_plt(mod, ip, aaddr); ++ new = ftrace_call_replace(ip, aaddr, true); ++ } ++#endif + + return ftrace_modify_code(rec->ip, old, new, true); + } +@@ -140,9 +153,9 @@ int ftrace_modify_call(struct dyn_ftrace + unsigned long new, old; + unsigned long ip = rec->ip; + +- old = ftrace_call_replace(ip, adjust_address(rec, old_addr)); ++ old = ftrace_call_replace(ip, adjust_address(rec, old_addr), true); + +- new = ftrace_call_replace(ip, adjust_address(rec, addr)); ++ new = ftrace_call_replace(ip, adjust_address(rec, addr), true); + + return ftrace_modify_code(rec->ip, old, new, true); + } +@@ -152,12 +165,29 @@ int ftrace_modify_call(struct dyn_ftrace + int ftrace_make_nop(struct module *mod, + struct dyn_ftrace *rec, unsigned long addr) + { ++ unsigned long aaddr = adjust_address(rec, addr); + unsigned long ip = rec->ip; + unsigned long old; + unsigned long new; + int ret; + +- old = ftrace_call_replace(ip, adjust_address(rec, addr)); ++#ifdef CONFIG_ARM_MODULE_PLTS ++ /* mod is only supplied during module loading */ ++ if (!mod) ++ mod = rec->arch.mod; ++ else ++ rec->arch.mod = mod; ++#endif ++ ++ old = ftrace_call_replace(ip, aaddr, ++ !IS_ENABLED(CONFIG_ARM_MODULE_PLTS) || !mod); ++#ifdef CONFIG_ARM_MODULE_PLTS ++ if (!old && mod) { ++ aaddr = get_module_plt(mod, ip, aaddr); ++ old = ftrace_call_replace(ip, aaddr, true); ++ } ++#endif ++ + new = ftrace_nop_replace(rec); + ret = ftrace_modify_code(ip, old, new, true); + +--- a/arch/arm/kernel/module-plts.c ++++ b/arch/arm/kernel/module-plts.c +@@ -4,6 +4,7 @@ + */ + + #include ++#include + #include + #include + #include +@@ -20,19 +21,52 @@ + (PLT_ENT_STRIDE - 8)) + #endif + ++static const u32 fixed_plts[] = { ++#ifdef CONFIG_FUNCTION_TRACER ++ FTRACE_ADDR, ++ MCOUNT_ADDR, ++#endif ++}; ++ + static bool in_init(const struct module *mod, unsigned long loc) + { + return loc - (u32)mod->init_layout.base < mod->init_layout.size; + } + ++static void prealloc_fixed(struct mod_plt_sec *pltsec, struct plt_entries *plt) ++{ ++ int i; ++ ++ if (!ARRAY_SIZE(fixed_plts) || pltsec->plt_count) ++ return; ++ pltsec->plt_count = ARRAY_SIZE(fixed_plts); ++ ++ for (i = 0; i < ARRAY_SIZE(plt->ldr); ++i) ++ plt->ldr[i] = PLT_ENT_LDR; ++ ++ BUILD_BUG_ON(sizeof(fixed_plts) > sizeof(plt->lit)); ++ memcpy(plt->lit, fixed_plts, sizeof(fixed_plts)); ++} ++ + u32 get_module_plt(struct module *mod, unsigned long loc, Elf32_Addr val) + { + struct mod_plt_sec *pltsec = !in_init(mod, loc) ? &mod->arch.core : + &mod->arch.init; ++ struct plt_entries *plt; ++ int idx; ++ ++ /* cache the address, ELF header is available only during module load */ ++ if (!pltsec->plt_ent) ++ pltsec->plt_ent = (struct plt_entries *)pltsec->plt->sh_addr; ++ plt = pltsec->plt_ent; + +- struct plt_entries *plt = (struct plt_entries *)pltsec->plt->sh_addr; +- int idx = 0; ++ prealloc_fixed(pltsec, plt); ++ ++ for (idx = 0; idx < ARRAY_SIZE(fixed_plts); ++idx) ++ if (plt->lit[idx] == val) ++ return (u32)&plt->ldr[idx]; + ++ idx = 0; + /* + * Look for an existing entry pointing to 'val'. Given that the + * relocations are sorted, this will be the last entry we allocated. +@@ -180,8 +214,8 @@ static unsigned int count_plts(const Elf + int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr *sechdrs, + char *secstrings, struct module *mod) + { +- unsigned long core_plts = 0; +- unsigned long init_plts = 0; ++ unsigned long core_plts = ARRAY_SIZE(fixed_plts); ++ unsigned long init_plts = ARRAY_SIZE(fixed_plts); + Elf32_Shdr *s, *sechdrs_end = sechdrs + ehdr->e_shnum; + Elf32_Sym *syms = NULL; + +@@ -236,6 +270,7 @@ int module_frob_arch_sections(Elf_Ehdr * + mod->arch.core.plt->sh_size = round_up(core_plts * PLT_ENT_SIZE, + sizeof(struct plt_entries)); + mod->arch.core.plt_count = 0; ++ mod->arch.core.plt_ent = NULL; + + mod->arch.init.plt->sh_type = SHT_NOBITS; + mod->arch.init.plt->sh_flags = SHF_EXECINSTR | SHF_ALLOC; +@@ -243,6 +278,7 @@ int module_frob_arch_sections(Elf_Ehdr * + mod->arch.init.plt->sh_size = round_up(init_plts * PLT_ENT_SIZE, + sizeof(struct plt_entries)); + mod->arch.init.plt_count = 0; ++ mod->arch.init.plt_ent = NULL; + + pr_debug("%s: plt=%x, init.plt=%x\n", __func__, + mod->arch.core.plt->sh_size, mod->arch.init.plt->sh_size); diff --git a/queue-5.10/arm-9098-1-ftrace-module_plt-fix-build-problem-without-dynamic_ftrace.patch b/queue-5.10/arm-9098-1-ftrace-module_plt-fix-build-problem-without-dynamic_ftrace.patch new file mode 100644 index 00000000000..bc6a6eb53ee --- /dev/null +++ b/queue-5.10/arm-9098-1-ftrace-module_plt-fix-build-problem-without-dynamic_ftrace.patch @@ -0,0 +1,39 @@ +From foo@baz Thu Sep 23 11:03:54 AM CEST 2021 +From: Florian Fainelli +Date: Wed, 22 Sep 2021 09:59:58 -0700 +Subject: ARM: 9098/1: ftrace: MODULE_PLT: Fix build problem without DYNAMIC_FTRACE +To: linux-kernel@vger.kernel.org +Cc: stable@vger.kernel.org, Greg Kroah-Hartman , Sasha Levin , Alex Sverdlin , kernel test robot , Russell King , Florian Fainelli , Steven Rostedt , Ingo Molnar , Russell King , linux-arm-kernel@lists.infradead.org (moderated list:ARM PORT) +Message-ID: <20210922165958.189843-5-f.fainelli@gmail.com> + +From: Alex Sverdlin + +commit 6fa630bf473827aee48cbf0efbbdf6f03134e890 upstream + +FTRACE_ADDR is only defined when CONFIG_DYNAMIC_FTRACE is defined, the +latter is even stronger requirement than CONFIG_FUNCTION_TRACER (which is +enough for MCOUNT_ADDR). + +Link: https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org/thread/ZUVCQBHDMFVR7CCB7JPESLJEWERZDJ3T/ + +Fixes: 1f12fb25c5c5d22f ("ARM: 9079/1: ftrace: Add MODULE_PLTS support") +Reported-by: kernel test robot +Signed-off-by: Alexander Sverdlin +Signed-off-by: Russell King +Signed-off-by: Florian Fainelli +Signed-off-by: Greg Kroah-Hartman +--- + arch/arm/kernel/module-plts.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/arm/kernel/module-plts.c ++++ b/arch/arm/kernel/module-plts.c +@@ -22,7 +22,7 @@ + #endif + + static const u32 fixed_plts[] = { +-#ifdef CONFIG_FUNCTION_TRACER ++#ifdef CONFIG_DYNAMIC_FTRACE + FTRACE_ADDR, + MCOUNT_ADDR, + #endif diff --git a/queue-5.10/series b/queue-5.10/series index c2e6b580f02..3d1caff0faa 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -3,3 +3,7 @@ pci-aardvark-fix-reporting-crs-value.patch console-consume-apc-dm-dcs.patch s390-pci_mmio-fully-validate-the-vma-before-calling-follow_pte.patch arm-qualify-enabling-of-swiotlb_init.patch +arm-9077-1-plt-move-struct-plt_entries-definition-to-header.patch +arm-9078-1-add-warn-suppress-parameter-to-arm_gen_branch_link.patch +arm-9079-1-ftrace-add-module_plts-support.patch +arm-9098-1-ftrace-module_plt-fix-build-problem-without-dynamic_ftrace.patch