From: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> Weak header file declarations are error-prone because they make every definition weak, and the linker chooses one based on link order (see 10629d711ed7 ("PCI: Remove __weak annotation from pcibios_get_phb_of_node decl")). For the following functions: arch_kexec_kernel_image_probe() arch_kexec_kernel_image_load() arch_kimage_file_post_load_cleanup() arch_kexec_kernel_verify_sig() arch_kexec_apply_relocations_add() arch_kexec_apply_relocations() kernel/kexec_file.c contains weak definitions, and x86 and powerpc arch code contains definitions intended to be non-weak. But the annotations in the header file make *all* the definitions weak, so it's unclear which ones will be used. Remove the "weak" attribute from the declarations so we always prefer non-weak definitions over the weak ones. Fixes: a43cac0d9dc2 ("kexec: split kexec_file syscall code to kexec_file.c") Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> CC: stable@xxxxxxxxxxxxxxx # v4.3+ --- include/linux/kexec.h | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/include/linux/kexec.h b/include/linux/kexec.h index f16f6ceb3875..8bf0ff90885c 100644 --- a/include/linux/kexec.h +++ b/include/linux/kexec.h @@ -277,16 +277,16 @@ int crash_shrink_memory(unsigned long new_size); size_t crash_get_memory_size(void); void crash_free_reserved_phys_range(unsigned long begin, unsigned long end); -int __weak arch_kexec_kernel_image_probe(struct kimage *image, void *buf, - unsigned long buf_len); -void * __weak arch_kexec_kernel_image_load(struct kimage *image); -int __weak arch_kimage_file_post_load_cleanup(struct kimage *image); -int __weak arch_kexec_kernel_verify_sig(struct kimage *image, void *buf, - unsigned long buf_len); -int __weak arch_kexec_apply_relocations_add(const Elf_Ehdr *ehdr, - Elf_Shdr *sechdrs, unsigned int relsec); -int __weak arch_kexec_apply_relocations(const Elf_Ehdr *ehdr, Elf_Shdr *sechdrs, - unsigned int relsec); +int arch_kexec_kernel_image_probe(struct kimage *image, void *buf, + unsigned long buf_len); +void *arch_kexec_kernel_image_load(struct kimage *image); +int arch_kimage_file_post_load_cleanup(struct kimage *image); +int arch_kexec_kernel_verify_sig(struct kimage *image, void *buf, + unsigned long buf_len); +int arch_kexec_apply_relocations_add(const Elf_Ehdr *ehdr, Elf_Shdr *sechdrs, + unsigned int relsec); +int arch_kexec_apply_relocations(const Elf_Ehdr *ehdr, Elf_Shdr *sechdrs, + unsigned int relsec); void arch_kexec_protect_crashkres(void); void arch_kexec_unprotect_crashkres(void); _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec