FAILED: patch "[PATCH] kexec_file: drop weak attribute from functions" failed to apply to 5.15-stable tree
Subsystems (6)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 65d9a9a60fd71be964effb2e94747a6acb6e7015 Mon Sep 17 00:00:00 2001
From: "Naveen N. Rao" <[email protected]>
Date: Fri, 1 Jul 2022 13:04:04 +0530
Subject: [PATCH] kexec_file: drop weak attribute from functions
As requested
(http://lkml.kernel.org/r/[email protected]),
this series converts weak functions in kexec to use the #ifdef approach.
Quoting the 3e35142ef99fe ("kexec_file: drop weak attribute from arch_kexec_apply_relocations[_add]") changelog:
: Since commit d1bcae833b32f1 ("ELF: Don't generate unused section symbols") : [1], binutils (v2.36+) started dropping section symbols that it thought : were unused. This isn't an issue in general, but with kexec_file.c, gcc : is placing kexec_arch_apply_relocations[_add] into a separate : .text.unlikely section and the section symbol ".text.unlikely" is being : dropped. Due to this, recordmcount is unable to find a non-weak symbol in : .text.unlikely to generate a relocation record against.
This patch (of 2);
Drop __weak attribute from functions in kexec_file.c:
- arch_kexec_kernel_image_probe()
- arch_kimage_file_post_load_cleanup()
- arch_kexec_kernel_image_load()
- arch_kexec_locate_mem_hole()
- arch_kexec_kernel_verify_sig()
arch_kexec_kernel_image_load() calls into kexec_image_load_default(), so drop the static attribute for the latter.
arch_kexec_kernel_verify_sig() is not overridden by any architecture, so drop the __weak attribute.
arch/arm64/include/asm/kexec.h +3 -1
@@ -115,7 +115,9 @@ extern const struct kexec_file_ops kexec_image_ops;struct kimage ; -extern int arch_kimage_file_post_load_cleanup (struct kimage *image); +int arch_kimage_file_post_load_cleanup (struct kimage *image); +#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup + extern int load_other_segments(struct kimage *image, unsigned long kernel_load_addr, unsigned long kernel_size, char *initrd, unsigned long initrd_len,
arch/powerpc/include/asm/kexec.h +9 -0
@@ -120,6 +120,15 @@ int setup_purgatory(struct kimage *image, const void *slave_code,#ifdef CONFIG_PPC64 struct kexec_buf ; +int arch_kexec_kernel_image_probe (struct kimage *image,void *buf,unsigned long buf_len); +#define arch_kexec_kernel_image_probe arch_kexec_kernel_image_probe + +int arch_kimage_file_post_load_cleanup (struct kimage *image); +#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup + +int arch_kexec_locate_mem_hole (struct kexec_buf *kbuf); +#define arch_kexec_locate_mem_hole arch_kexec_locate_mem_hole +int load_crashdump_segments_ppc64 (struct kimage *image,struct kexec_buf *kbuf); int setup_purgatory_ppc64(struct kimage *image, const void *slave_code,
arch/s390/include/asm/kexec.h +3 -0
@@ -92,5 +92,8 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,const Elf_Shdr *relsec, const Elf_Shdr *symtab);#define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add + +int arch_kimage_file_post_load_cleanup (struct kimage *image); +#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup#endif #endif /*_S390_KEXEC_H */
arch/x86/include/asm/kexec.h +6 -0
@@ -193,6 +193,12 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,const Elf_Shdr *relsec, const Elf_Shdr *symtab);#define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add + +void *arch_kexec_kernel_image_load (struct kimage *image); +#define arch_kexec_kernel_image_load arch_kexec_kernel_image_load + +int arch_kimage_file_post_load_cleanup (struct kimage *image); +#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup#endif #endif
include/linux/kexec.h +38 -6
59 lines not on this page · raw message
kernel/kexec_file.c +2 -33
@@ -62,14 +62,7 @@ int kexec_image_probe_default(struct kimage *image, void *buf,return ret; } -/* Architectures can provide this probe function */ -int __weak arch_kexec_kernel_image_probe (struct kimage *image,void *buf, -unsigned long buf_len) -{ -return kexec_image_probe_default (image, buf, buf_len); -} - -static void *kexec_image_load_default (struct kimage *image) +void *kexec_image_load_default (struct kimage *image) {if (!image->fops || !image->fops->load)return ERR_PTR (-ENOEXEC );
@@ -80,11 +73,6 @@ static void *kexec_image_load_default(struct kimage *image) image->cmdline_buf_len); } -void *__weak arch_kexec_kernel_image_load (struct kimage *image) -{ -return kexec_image_load_default (image); -} -int kexec_image_post_load_cleanup_default (struct kimage *image) {if (!image->fops || !image->fops->cleanup)
@@ -93,11 +81,6 @@ int kexec_image_post_load_cleanup_default(struct kimage *image)return image->fops->cleanup (image->image_loader_data); } -int __weak arch_kimage_file_post_load_cleanup (struct kimage *image) -{ -return kexec_image_post_load_cleanup_default (image); -} -#ifdef CONFIG_KEXEC_SIG static int kexec_image_verify_sig_default (struct kimage *image,void *buf,unsigned long buf_len)
@@ -110,8 +93,7 @@ static int kexec_image_verify_sig_default(struct kimage *image, void *buf,return image->fops->verify_sig (buf, buf_len); } -int __weak arch_kexec_kernel_verify_sig (struct kimage *image,void *buf, -unsigned long buf_len) +int arch_kexec_kernel_verify_sig (struct kimage *image,void *buf,unsigned long buf_len) {return kexec_image_verify_sig_default (image, buf, buf_len); }
@@ -621,19 +603,6 @@ int kexec_locate_mem_hole(struct kexec_buf *kbuf)return ret ==1 ?0 : -EADDRNOTAVAIL ; } -/** -* arch_kexec_locate_mem_hole - Find free memory to place the segments. -* @kbuf: Parameters for the memory search. -* -* On success, kbuf->mem will have the start address of the memory region found. -* -* Return: 0 on success, negative errno on error. -*/ -int __weak arch_kexec_locate_mem_hole (struct kexec_buf *kbuf) -{ -return kexec_locate_mem_hole (kbuf); -} -/** * kexec_add_buffer - place a buffer in a kexec segment * @kbuf: Buffer contents and memory parameters.