Message ID | 20220519091237.676736-1-naveen.n.rao@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Handled Elsewhere |
Headers | show |
Series | [v2] kexec_file: Drop weak attribute from arch_kexec_apply_relocations[_add] | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/github-powerpc_kernel_qemu | success | Successfully ran 24 jobs. |
snowpatch_ozlabs/github-powerpc_sparse | success | Successfully ran 4 jobs. |
snowpatch_ozlabs/github-powerpc_clang | success | Successfully ran 7 jobs. |
Hi "Naveen, I love your patch! Yet something to improve: [auto build test ERROR on f993aed406eaf968ba3867a76bb46c95336a33d0] url: https://github.com/intel-lab-lkp/linux/commits/Naveen-N-Rao/kexec_file-Drop-weak-attribute-from-arch_kexec_apply_relocations-_add/20220519-171432 base: f993aed406eaf968ba3867a76bb46c95336a33d0 config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20220519/202205192320.CoXevcfR-lkp@intel.com/config) compiler: s390-linux-gcc (GCC) 11.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/67171688c71cb5b05f26e0dfc45eec8d8d1428ff git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Naveen-N-Rao/kexec_file-Drop-weak-attribute-from-arch_kexec_apply_relocations-_add/20220519-171432 git checkout 67171688c71cb5b05f26e0dfc45eec8d8d1428ff # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=s390 SHELL=/bin/bash arch/s390/ If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All errors (new ones prefixed by >>): In file included from arch/s390/kernel/machine_kexec_reloc.c:3: >> arch/s390/include/asm/kexec.h:89:38: error: unknown type name 'Elf_Shdr'; did you mean 'elf_shdr'? 89 | Elf_Shdr *section, | ^~~~~~~~ | elf_shdr arch/s390/include/asm/kexec.h:90:44: error: unknown type name 'Elf_Shdr' 90 | const Elf_Shdr *relsec, | ^~~~~~~~ arch/s390/include/asm/kexec.h:91:44: error: unknown type name 'Elf_Shdr' 91 | const Elf_Shdr *symtab); | ^~~~~~~~ vim +89 arch/s390/include/asm/kexec.h 85 86 #ifdef CONFIG_KEXEC_FILE 87 struct purgatory_info; 88 int arch_kexec_apply_relocations_add(struct purgatory_info *pi, > 89 Elf_Shdr *section,
On Thu, 19 May 2022 23:17:48 +0800 kernel test robot <lkp@intel.com> wrote: > Hi "Naveen, > > I love your patch! Yet something to improve: > > [auto build test ERROR on f993aed406eaf968ba3867a76bb46c95336a33d0] > > url: https://github.com/intel-lab-lkp/linux/commits/Naveen-N-Rao/kexec_file-Drop-weak-attribute-from-arch_kexec_apply_relocations-_add/20220519-171432 > base: f993aed406eaf968ba3867a76bb46c95336a33d0 > config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20220519/202205192320.CoXevcfR-lkp@intel.com/config) > compiler: s390-linux-gcc (GCC) 11.3.0 > reproduce (this is a W=1 build): > wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross > chmod +x ~/bin/make.cross > # https://github.com/intel-lab-lkp/linux/commit/67171688c71cb5b05f26e0dfc45eec8d8d1428ff > git remote add linux-review https://github.com/intel-lab-lkp/linux > git fetch --no-tags linux-review Naveen-N-Rao/kexec_file-Drop-weak-attribute-from-arch_kexec_apply_relocations-_add/20220519-171432 > git checkout 67171688c71cb5b05f26e0dfc45eec8d8d1428ff > # save the config file > mkdir build_dir && cp config build_dir/.config > COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=s390 SHELL=/bin/bash arch/s390/ > > If you fix the issue, kindly add following tag as appropriate > Reported-by: kernel test robot <lkp@intel.com> > > All errors (new ones prefixed by >>): > > In file included from arch/s390/kernel/machine_kexec_reloc.c:3: > >> arch/s390/include/asm/kexec.h:89:38: error: unknown type name 'Elf_Shdr'; did you mean 'elf_shdr'? > 89 | Elf_Shdr *section, > | ^~~~~~~~ > | elf_shdr > arch/s390/include/asm/kexec.h:90:44: error: unknown type name 'Elf_Shdr' > 90 | const Elf_Shdr *relsec, > | ^~~~~~~~ > arch/s390/include/asm/kexec.h:91:44: error: unknown type name 'Elf_Shdr' > 91 | const Elf_Shdr *symtab); > | ^~~~~~~~ Thanks, I did this: --- a/arch/s390/include/asm/kexec.h~kexec_file-drop-weak-attribute-from-arch_kexec_apply_relocations-fix +++ a/arch/s390/include/asm/kexec.h @@ -9,6 +9,8 @@ #ifndef _S390_KEXEC_H #define _S390_KEXEC_H +#include <linux/module.h> + #include <asm/processor.h> #include <asm/page.h> #include <asm/setup.h>
Hello, on current linux-next ARCH=riscv allmodconfig breaks with: CC arch/riscv/kernel/elf_kexec.o arch/riscv/kernel/elf_kexec.c:345:5: error: redefinition of ‘arch_kexec_apply_relocations_add’ 345 | int arch_kexec_apply_relocations_add(struct purgatory_info *pi, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from arch/riscv/kernel/elf_kexec.c:16: include/linux/kexec.h:236:1: note: previous definition of ‘arch_kexec_apply_relocations_add’ with type ‘int(struct purgatory_info *, Elf64_Shdr *, const Elf64_Shdr *, const Elf64_Shdr *)’ {aka ‘int(struct purgatory_info *, struct elf64_shdr *, const struct elf64_shdr *, const struct elf64_shdr *)’} 236 | arch_kexec_apply_relocations_add(struct purgatory_info *pi, Elf_Shdr *section, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (I think) because there is a conflict between the two commits: 233c1e6c319c kexec_file: drop weak attribute from arch_kexec_apply_relocations[_add] 838b3e28488f RISC-V: Load purgatory in kexec_file And so next is broken starting from 164a9037b1d33f28ba27671c16ec1c23d4a11acf which merges the riscv tree. Best regards Uwe
Le 29/05/2022 à 08:56, Uwe Kleine-König a écrit : > Hello, > > on current linux-next ARCH=riscv allmodconfig breaks with: > > CC arch/riscv/kernel/elf_kexec.o > arch/riscv/kernel/elf_kexec.c:345:5: error: redefinition of ‘arch_kexec_apply_relocations_add’ > 345 | int arch_kexec_apply_relocations_add(struct purgatory_info *pi, > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > In file included from arch/riscv/kernel/elf_kexec.c:16: > include/linux/kexec.h:236:1: note: previous definition of ‘arch_kexec_apply_relocations_add’ with type ‘int(struct purgatory_info *, Elf64_Shdr *, const Elf64_Shdr *, const Elf64_Shdr *)’ {aka ‘int(struct purgatory_info *, struct elf64_shdr *, const struct elf64_shdr *, const struct elf64_shdr *)’} > 236 | arch_kexec_apply_relocations_add(struct purgatory_info *pi, Elf_Shdr *section, > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > (I think) because there is a conflict between the two commits: > > 233c1e6c319c kexec_file: drop weak attribute from arch_kexec_apply_relocations[_add] > 838b3e28488f RISC-V: Load purgatory in kexec_file > > And so next is broken starting from > 164a9037b1d33f28ba27671c16ec1c23d4a11acf which merges the riscv tree. > In arch/riscv/include/asm/kexec.h, do the same as s390 did in commit 233c1e6c319c: diff --git a/arch/s390/include/asm/kexec.h b/arch/s390/include/asm/kexec.h index 7f3c9ac34bd8..540dd469b088 100644 --- a/arch/s390/include/asm/kexec.h +++ b/arch/s390/include/asm/kexec.h @@ -83,4 +83,12 @@ struct kimage_arch { extern const struct kexec_file_ops s390_kexec_image_ops; extern const struct kexec_file_ops s390_kexec_elf_ops; +#ifdef CONFIG_KEXEC_FILE +struct purgatory_info; +int arch_kexec_apply_relocations_add(struct purgatory_info *pi, + Elf_Shdr *section, + const Elf_Shdr *relsec, + const Elf_Shdr *symtab); +#define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add +#endif #endif /*_S390_KEXEC_H */
Hello, On Sun, May 29, 2022 at 09:46:47AM +0000, Christophe Leroy wrote: > Le 29/05/2022 à 08:56, Uwe Kleine-König a écrit : > > Hello, > > > > on current linux-next ARCH=riscv allmodconfig breaks with: > > > > CC arch/riscv/kernel/elf_kexec.o > > arch/riscv/kernel/elf_kexec.c:345:5: error: redefinition of ‘arch_kexec_apply_relocations_add’ > > 345 | int arch_kexec_apply_relocations_add(struct purgatory_info *pi, > > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > In file included from arch/riscv/kernel/elf_kexec.c:16: > > include/linux/kexec.h:236:1: note: previous definition of ‘arch_kexec_apply_relocations_add’ with type ‘int(struct purgatory_info *, Elf64_Shdr *, const Elf64_Shdr *, const Elf64_Shdr *)’ {aka ‘int(struct purgatory_info *, struct elf64_shdr *, const struct elf64_shdr *, const struct elf64_shdr *)’} > > 236 | arch_kexec_apply_relocations_add(struct purgatory_info *pi, Elf_Shdr *section, > > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > > > (I think) because there is a conflict between the two commits: > > > > 233c1e6c319c kexec_file: drop weak attribute from arch_kexec_apply_relocations[_add] > > 838b3e28488f RISC-V: Load purgatory in kexec_file > > > > And so next is broken starting from > > 164a9037b1d33f28ba27671c16ec1c23d4a11acf which merges the riscv tree. > > > > In arch/riscv/include/asm/kexec.h, do the same as s390 did in commit > 233c1e6c319c: > > diff --git a/arch/s390/include/asm/kexec.h b/arch/s390/include/asm/kexec.h > index 7f3c9ac34bd8..540dd469b088 100644 > --- a/arch/s390/include/asm/kexec.h > +++ b/arch/s390/include/asm/kexec.h > @@ -83,4 +83,12 @@ struct kimage_arch { > extern const struct kexec_file_ops s390_kexec_image_ops; > extern const struct kexec_file_ops s390_kexec_elf_ops; > > +#ifdef CONFIG_KEXEC_FILE > +struct purgatory_info; > +int arch_kexec_apply_relocations_add(struct purgatory_info *pi, > + Elf_Shdr *section, > + const Elf_Shdr *relsec, > + const Elf_Shdr *symtab); > +#define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add > +#endif > #endif /*_S390_KEXEC_H */ I can confirm that doing diff --git a/arch/riscv/include/asm/kexec.h b/arch/riscv/include/asm/kexec.h index 206217b23301..eee260e8ab30 100644 --- a/arch/riscv/include/asm/kexec.h +++ b/arch/riscv/include/asm/kexec.h @@ -55,6 +55,13 @@ extern riscv_kexec_method riscv_kexec_norelocate; #ifdef CONFIG_KEXEC_FILE extern const struct kexec_file_ops elf_kexec_ops; + +struct purgatory_info; +int arch_kexec_apply_relocations_add(struct purgatory_info *pi, + Elf_Shdr *section, + const Elf_Shdr *relsec, + const Elf_Shdr *symtab); +#define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add #endif #endif on top of 838b3e28488f results in a compilable tree. And when merging 233c1e6c319c into this, it is still building. I'm not enough into kexec (and riscv) to judge if this is sensible, or create a useful commit log but the obvious way forward is to apply the above patch to the riscv tree before it hits Linus' tree. Best regards Uwe
在 2022/5/29 22:06, Uwe Kleine-König 写道: > Hello, > > On Sun, May 29, 2022 at 09:46:47AM +0000, Christophe Leroy wrote: >> Le 29/05/2022 à 08:56, Uwe Kleine-König a écrit : >>> Hello, >>> >>> on current linux-next ARCH=riscv allmodconfig breaks with: >>> >>> CC arch/riscv/kernel/elf_kexec.o >>> arch/riscv/kernel/elf_kexec.c:345:5: error: redefinition of ‘arch_kexec_apply_relocations_add’ >>> 345 | int arch_kexec_apply_relocations_add(struct purgatory_info *pi, >>> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>> In file included from arch/riscv/kernel/elf_kexec.c:16: >>> include/linux/kexec.h:236:1: note: previous definition of ‘arch_kexec_apply_relocations_add’ with type ‘int(struct purgatory_info *, Elf64_Shdr *, const Elf64_Shdr *, const Elf64_Shdr *)’ {aka ‘int(struct purgatory_info *, struct elf64_shdr *, const struct elf64_shdr *, const struct elf64_shdr *)’} >>> 236 | arch_kexec_apply_relocations_add(struct purgatory_info *pi, Elf_Shdr *section, >>> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>> >>> (I think) because there is a conflict between the two commits: >>> >>> 233c1e6c319c kexec_file: drop weak attribute from arch_kexec_apply_relocations[_add] >>> 838b3e28488f RISC-V: Load purgatory in kexec_file >>> >>> And so next is broken starting from >>> 164a9037b1d33f28ba27671c16ec1c23d4a11acf which merges the riscv tree. >>> >> >> In arch/riscv/include/asm/kexec.h, do the same as s390 did in commit >> 233c1e6c319c: >> >> diff --git a/arch/s390/include/asm/kexec.h b/arch/s390/include/asm/kexec.h >> index 7f3c9ac34bd8..540dd469b088 100644 >> --- a/arch/s390/include/asm/kexec.h >> +++ b/arch/s390/include/asm/kexec.h >> @@ -83,4 +83,12 @@ struct kimage_arch { >> extern const struct kexec_file_ops s390_kexec_image_ops; >> extern const struct kexec_file_ops s390_kexec_elf_ops; >> >> +#ifdef CONFIG_KEXEC_FILE >> +struct purgatory_info; >> +int arch_kexec_apply_relocations_add(struct purgatory_info *pi, >> + Elf_Shdr *section, >> + const Elf_Shdr *relsec, >> + const Elf_Shdr *symtab); >> +#define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add >> +#endif >> #endif /*_S390_KEXEC_H */ > > I can confirm that doing > > diff --git a/arch/riscv/include/asm/kexec.h b/arch/riscv/include/asm/kexec.h > index 206217b23301..eee260e8ab30 100644 > --- a/arch/riscv/include/asm/kexec.h > +++ b/arch/riscv/include/asm/kexec.h > @@ -55,6 +55,13 @@ extern riscv_kexec_method riscv_kexec_norelocate; > > #ifdef CONFIG_KEXEC_FILE > extern const struct kexec_file_ops elf_kexec_ops; > + > +struct purgatory_info; > +int arch_kexec_apply_relocations_add(struct purgatory_info *pi, > + Elf_Shdr *section, > + const Elf_Shdr *relsec, > + const Elf_Shdr *symtab); > +#define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add > #endif > > #endif LGTM, you could send a fixup patch to riscv, thanks. > > on top of 838b3e28488f results in a compilable tree. And when merging > 233c1e6c319c into this, it is still building. > > I'm not enough into kexec (and riscv) to judge if this is sensible, or > create a useful commit log but the obvious way forward is to apply the > above patch to the riscv tree before it hits Linus' tree. > > Best regards > Uwe > > > _______________________________________________ > linux-riscv mailing list > linux-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv
diff --git a/arch/s390/include/asm/kexec.h b/arch/s390/include/asm/kexec.h index 7f3c9ac34bd8d1..540dd469b0886d 100644 --- a/arch/s390/include/asm/kexec.h +++ b/arch/s390/include/asm/kexec.h @@ -83,4 +83,12 @@ struct kimage_arch { extern const struct kexec_file_ops s390_kexec_image_ops; extern const struct kexec_file_ops s390_kexec_elf_ops; +#ifdef CONFIG_KEXEC_FILE +struct purgatory_info; +int arch_kexec_apply_relocations_add(struct purgatory_info *pi, + Elf_Shdr *section, + const Elf_Shdr *relsec, + const Elf_Shdr *symtab); +#define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add +#endif #endif /*_S390_KEXEC_H */ diff --git a/arch/x86/include/asm/kexec.h b/arch/x86/include/asm/kexec.h index 11b7c06e2828c3..6ad8d946cd3ebf 100644 --- a/arch/x86/include/asm/kexec.h +++ b/arch/x86/include/asm/kexec.h @@ -186,6 +186,14 @@ extern int arch_kexec_post_alloc_pages(void *vaddr, unsigned int pages, extern void arch_kexec_pre_free_pages(void *vaddr, unsigned int pages); #define arch_kexec_pre_free_pages arch_kexec_pre_free_pages +#ifdef CONFIG_KEXEC_FILE +struct purgatory_info; +int arch_kexec_apply_relocations_add(struct purgatory_info *pi, + Elf_Shdr *section, + const Elf_Shdr *relsec, + const Elf_Shdr *symtab); +#define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add +#endif #endif typedef void crash_vmclear_fn(void); diff --git a/include/linux/kexec.h b/include/linux/kexec.h index 58d1b58a971e34..fcd5035209f19a 100644 --- a/include/linux/kexec.h +++ b/include/linux/kexec.h @@ -193,14 +193,6 @@ void *kexec_purgatory_get_symbol_addr(struct kimage *image, const char *name); 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_kexec_apply_relocations_add(struct purgatory_info *pi, - Elf_Shdr *section, - const Elf_Shdr *relsec, - const Elf_Shdr *symtab); -int arch_kexec_apply_relocations(struct purgatory_info *pi, - Elf_Shdr *section, - const Elf_Shdr *relsec, - const Elf_Shdr *symtab); int arch_kimage_file_post_load_cleanup(struct kimage *image); #ifdef CONFIG_KEXEC_SIG int arch_kexec_kernel_verify_sig(struct kimage *image, void *buf, @@ -229,6 +221,44 @@ extern int crash_exclude_mem_range(struct crash_mem *mem, unsigned long long mend); extern int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map, void **addr, unsigned long *sz); + +#ifndef arch_kexec_apply_relocations_add +/* + * arch_kexec_apply_relocations_add - apply relocations of type RELA + * @pi: Purgatory to be relocated. + * @section: Section relocations applying to. + * @relsec: Section containing RELAs. + * @symtab: Corresponding symtab. + * + * Return: 0 on success, negative errno on error. + */ +static inline int +arch_kexec_apply_relocations_add(struct purgatory_info *pi, Elf_Shdr *section, + const Elf_Shdr *relsec, const Elf_Shdr *symtab) +{ + pr_err("RELA relocation unsupported.\n"); + return -ENOEXEC; +} +#endif + +#ifndef arch_kexec_apply_relocations +/* + * arch_kexec_apply_relocations - apply relocations of type REL + * @pi: Purgatory to be relocated. + * @section: Section relocations applying to. + * @relsec: Section containing RELs. + * @symtab: Corresponding symtab. + * + * Return: 0 on success, negative errno on error. + */ +static inline int +arch_kexec_apply_relocations(struct purgatory_info *pi, Elf_Shdr *section, + const Elf_Shdr *relsec, const Elf_Shdr *symtab) +{ + pr_err("REL relocation unsupported.\n"); + return -ENOEXEC; +} +#endif #endif /* CONFIG_KEXEC_FILE */ #ifdef CONFIG_KEXEC_ELF diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c index 8347fc158d2b96..c108a2a8875463 100644 --- a/kernel/kexec_file.c +++ b/kernel/kexec_file.c @@ -108,40 +108,6 @@ int __weak arch_kexec_kernel_verify_sig(struct kimage *image, void *buf, } #endif -/* - * arch_kexec_apply_relocations_add - apply relocations of type RELA - * @pi: Purgatory to be relocated. - * @section: Section relocations applying to. - * @relsec: Section containing RELAs. - * @symtab: Corresponding symtab. - * - * Return: 0 on success, negative errno on error. - */ -int __weak -arch_kexec_apply_relocations_add(struct purgatory_info *pi, Elf_Shdr *section, - const Elf_Shdr *relsec, const Elf_Shdr *symtab) -{ - pr_err("RELA relocation unsupported.\n"); - return -ENOEXEC; -} - -/* - * arch_kexec_apply_relocations - apply relocations of type REL - * @pi: Purgatory to be relocated. - * @section: Section relocations applying to. - * @relsec: Section containing RELs. - * @symtab: Corresponding symtab. - * - * Return: 0 on success, negative errno on error. - */ -int __weak -arch_kexec_apply_relocations(struct purgatory_info *pi, Elf_Shdr *section, - const Elf_Shdr *relsec, const Elf_Shdr *symtab) -{ - pr_err("REL relocation unsupported.\n"); - return -ENOEXEC; -} - /* * Free up memory used by kernel, initrd, and command line. This is temporary * memory allocation which is not needed any more after these buffers have