* [mmotm:master 125/157] arch/powerpc/kernel/machine_kexec_64.c:420:29: error: 'kexec_file_loaders' undeclared
@ 2016-10-12 3:22 kbuild test robot
0 siblings, 0 replies; 2+ messages in thread
From: kbuild test robot @ 2016-10-12 3:22 UTC (permalink / raw)
To: Thiago Jung Bauermann
Cc: kbuild-all, Johannes Weiner, Josh Sklar, Andrew Morton,
Linux Memory Management List
[-- Attachment #1: Type: text/plain, Size: 9849 bytes --]
tree: git://git.cmpxchg.org/linux-mmotm.git master
head: fe4cd888f71ef173e0e5a0f9dccc42904c0107f3
commit: a9575b2675ab592db97df85078d2f7745ca31233 [125/157] powerpc: implement kexec_file_load
config: powerpc-allyesconfig (attached as .config)
compiler: powerpc64-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout a9575b2675ab592db97df85078d2f7745ca31233
# save the attached .config to linux build tree
make.cross ARCH=powerpc
All error/warnings (new ones prefixed by >>):
In file included from include/linux/list.h:8:0,
from include/linux/kobject.h:20,
from include/linux/device.h:17,
from arch/powerpc/include/asm/io.h:27,
from include/linux/kexec.h:17,
from arch/powerpc/kernel/machine_kexec_64.c:13:
arch/powerpc/kernel/machine_kexec_64.c: In function 'arch_kexec_kernel_image_probe':
>> arch/powerpc/kernel/machine_kexec_64.c:420:29: error: 'kexec_file_loaders' undeclared (first use in this function)
for (i = 0; i < ARRAY_SIZE(kexec_file_loaders); i++) {
^
include/linux/kernel.h:53:33: note: in definition of macro 'ARRAY_SIZE'
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
^~~
arch/powerpc/kernel/machine_kexec_64.c:420:29: note: each undeclared identifier is reported only once for each function it appears in
for (i = 0; i < ARRAY_SIZE(kexec_file_loaders); i++) {
^
include/linux/kernel.h:53:33: note: in definition of macro 'ARRAY_SIZE'
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
^~~
In file included from arch/powerpc/include/asm/mmu.h:115:0,
from arch/powerpc/include/asm/lppaca.h:36,
from arch/powerpc/include/asm/paca.h:21,
from arch/powerpc/include/asm/current.h:16,
from include/linux/mutex.h:13,
from include/linux/kernfs.h:13,
from include/linux/sysfs.h:15,
from include/linux/kobject.h:21,
from include/linux/device.h:17,
from arch/powerpc/include/asm/io.h:27,
from include/linux/kexec.h:17,
from arch/powerpc/kernel/machine_kexec_64.c:13:
include/linux/bug.h:37:45: error: bit-field '<anonymous>' width not an integer constant
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
^
include/linux/compiler-gcc.h:64:28: note: in expansion of macro 'BUILD_BUG_ON_ZERO'
#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
^~~~~~~~~~~~~~~~~
include/linux/kernel.h:53:59: note: in expansion of macro '__must_be_array'
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
^~~~~~~~~~~~~~~
>> arch/powerpc/kernel/machine_kexec_64.c:420:18: note: in expansion of macro 'ARRAY_SIZE'
for (i = 0; i < ARRAY_SIZE(kexec_file_loaders); i++) {
^~~~~~~~~~
arch/powerpc/kernel/machine_kexec_64.c: In function 'setup_purgatory':
>> arch/powerpc/kernel/machine_kexec_64.c:568:27: error: 'SLAVE_CODE_SIZE' undeclared (first use in this function)
slave_code_buf = kmalloc(SLAVE_CODE_SIZE, GFP_KERNEL);
^~~~~~~~~~~~~~~
vim +/kexec_file_loaders +420 arch/powerpc/kernel/machine_kexec_64.c
414 struct kexec_file_ops *fops;
415
416 /* We don't support crash kernels yet. */
417 if (image->type == KEXEC_TYPE_CRASH)
418 return -ENOTSUPP;
419
> 420 for (i = 0; i < ARRAY_SIZE(kexec_file_loaders); i++) {
421 fops = kexec_file_loaders[i];
422 if (!fops || !fops->probe)
423 continue;
424
425 ret = fops->probe(buf, buf_len);
426 if (!ret) {
427 image->fops = fops;
428 return ret;
429 }
430 }
431
432 return ret;
433 }
434
435 void *arch_kexec_kernel_image_load(struct kimage *image)
436 {
437 if (!image->fops || !image->fops->load)
438 return ERR_PTR(-ENOEXEC);
439
440 return image->fops->load(image, image->kernel_buf,
441 image->kernel_buf_len, image->initrd_buf,
442 image->initrd_buf_len, image->cmdline_buf,
443 image->cmdline_buf_len);
444 }
445
446 int arch_kimage_file_post_load_cleanup(struct kimage *image)
447 {
448 if (!image->fops || !image->fops->cleanup)
449 return 0;
450
451 return image->fops->cleanup(image->image_loader_data);
452 }
453
454 /**
455 * arch_kexec_walk_mem() - call func(data) for each unreserved memory block
456 * @kbuf: Context info for the search. Also passed to @func.
457 * @func: Function to call for each memory block.
458 *
459 * This function is used by kexec_add_buffer and kexec_locate_mem_hole
460 * to find unreserved memory to load kexec segments into.
461 *
462 * Return: The memory walk will stop when func returns a non-zero value
463 * and that value will be returned. If all free regions are visited without
464 * func returning non-zero, then zero will be returned.
465 */
466 int arch_kexec_walk_mem(struct kexec_buf *kbuf, int (*func)(u64, u64, void *))
467 {
468 int ret = 0;
469 u64 i;
470 phys_addr_t mstart, mend;
471
472 if (kbuf->top_down) {
473 for_each_free_mem_range_reverse(i, NUMA_NO_NODE, 0,
474 &mstart, &mend, NULL) {
475 /*
476 * In memblock, end points to the first byte after the
477 * range while in kexec, end points to the last byte
478 * in the range.
479 */
480 ret = func(mstart, mend - 1, kbuf);
481 if (ret)
482 break;
483 }
484 } else {
485 for_each_free_mem_range(i, NUMA_NO_NODE, 0, &mstart, &mend,
486 NULL) {
487 /*
488 * In memblock, end points to the first byte after the
489 * range while in kexec, end points to the last byte
490 * in the range.
491 */
492 ret = func(mstart, mend - 1, kbuf);
493 if (ret)
494 break;
495 }
496 }
497
498 return ret;
499 }
500
501 /**
502 * arch_kexec_apply_relocations_add() - apply purgatory relocations
503 * @ehdr: Pointer to ELF headers.
504 * @sechdrs: Pointer to section headers.
505 * @relsec: Section index of SHT_RELA section.
506 *
507 * Elf64_Shdr.sh_offset has been modified to keep the pointer to the section
508 * contents, while Elf64_Shdr.sh_addr points to the final address of the
509 * section in memory.
510 */
511 int arch_kexec_apply_relocations_add(const Elf64_Ehdr *ehdr,
512 Elf64_Shdr *sechdrs, unsigned int relsec)
513 {
514 /* Section containing the relocation entries. */
515 Elf64_Shdr *rel_section = &sechdrs[relsec];
516 const Elf64_Rela *rela = (const Elf64_Rela *) rel_section->sh_offset;
517 unsigned int num_rela = rel_section->sh_size / sizeof(Elf64_Rela);
518 /* Section to which relocations apply. */
519 Elf64_Shdr *target_section = &sechdrs[rel_section->sh_info];
520 /* Associated symbol table. */
521 Elf64_Shdr *symtabsec = &sechdrs[rel_section->sh_link];
522 void *syms_base = (void *) symtabsec->sh_offset;
523 void *loc_base = (void *) target_section->sh_offset;
524 Elf64_Addr addr_base = target_section->sh_addr;
525 struct elf_info elf_info;
526 const char *strtab;
527
528 if (symtabsec->sh_link >= ehdr->e_shnum) {
529 /* Invalid strtab section number */
530 pr_err("Invalid string table section index %d\n",
531 symtabsec->sh_link);
532 return -ENOEXEC;
533 }
534 /* String table for the associated symbol table. */
535 strtab = (const char *) sechdrs[symtabsec->sh_link].sh_offset;
536
537 elf_init_elf_info(ehdr, sechdrs, &elf_info);
538
539 return elf64_apply_relocate_add(&elf_info, strtab, rela, num_rela,
540 syms_base, loc_base, addr_base,
541 true, true, "kexec purgatory");
542 }
543
544 /**
545 * setup_purgatory() - setup the purgatory runtime variables
546 * @image: kexec image.
547 * @slave_code: Slave code for the purgatory.
548 * @fdt: Flattened device tree for the next kernel.
549 * @kernel_load_addr: Address where the kernel is loaded.
550 * @fdt_load_addr: Address where the flattened device tree is loaded.
551 * @stack_top: Address where the purgatory can place its stack.
552 * @debug: Can the purgatory print messages to the console?
553 *
554 * Return: 0 on success, or negative errno on error.
555 */
556 int setup_purgatory(struct kimage *image, const void *slave_code,
557 const void *fdt, unsigned long kernel_load_addr,
558 unsigned long fdt_load_addr, unsigned long stack_top,
559 int debug)
560 {
561 int ret, tree_node;
562 const void *prop;
563 unsigned long opal_base, opal_entry;
564 uint64_t toc;
565 unsigned int *slave_code_buf, master_entry;
566 struct elf_info purg_info;
567
> 568 slave_code_buf = kmalloc(SLAVE_CODE_SIZE, GFP_KERNEL);
569 if (!slave_code_buf)
570 return -ENOMEM;
571
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 50777 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
* [mmotm:master 125/157] arch/powerpc/kernel/machine_kexec_64.c:420:29: error: 'kexec_file_loaders' undeclared
@ 2016-10-24 7:24 kbuild test robot
0 siblings, 0 replies; 2+ messages in thread
From: kbuild test robot @ 2016-10-24 7:24 UTC (permalink / raw)
To: Thiago Jung Bauermann
Cc: kbuild-all, Johannes Weiner, Josh Sklar, Andrew Morton,
Linux Memory Management List
[-- Attachment #1: Type: text/plain, Size: 9841 bytes --]
tree: git://git.cmpxchg.org/linux-mmotm.git master
head: fe4cd888f71ef173e0e5a0f9dccc42904c0107f3
commit: a9575b2675ab592db97df85078d2f7745ca31233 [125/157] powerpc: implement kexec_file_load
config: powerpc-allyesconfig (attached as .config)
compiler: powerpc64-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout a9575b2675ab592db97df85078d2f7745ca31233
# save the attached .config to linux build tree
make.cross ARCH=powerpc
All errors (new ones prefixed by >>):
In file included from include/linux/list.h:8:0,
from include/linux/kobject.h:20,
from include/linux/device.h:17,
from arch/powerpc/include/asm/io.h:27,
from include/linux/kexec.h:17,
from arch/powerpc/kernel/machine_kexec_64.c:13:
arch/powerpc/kernel/machine_kexec_64.c: In function 'arch_kexec_kernel_image_probe':
>> arch/powerpc/kernel/machine_kexec_64.c:420:29: error: 'kexec_file_loaders' undeclared (first use in this function)
for (i = 0; i < ARRAY_SIZE(kexec_file_loaders); i++) {
^
include/linux/kernel.h:53:33: note: in definition of macro 'ARRAY_SIZE'
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
^~~
arch/powerpc/kernel/machine_kexec_64.c:420:29: note: each undeclared identifier is reported only once for each function it appears in
for (i = 0; i < ARRAY_SIZE(kexec_file_loaders); i++) {
^
include/linux/kernel.h:53:33: note: in definition of macro 'ARRAY_SIZE'
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
^~~
In file included from arch/powerpc/include/asm/mmu.h:115:0,
from arch/powerpc/include/asm/lppaca.h:36,
from arch/powerpc/include/asm/paca.h:21,
from arch/powerpc/include/asm/current.h:16,
from include/linux/mutex.h:13,
from include/linux/kernfs.h:13,
from include/linux/sysfs.h:15,
from include/linux/kobject.h:21,
from include/linux/device.h:17,
from arch/powerpc/include/asm/io.h:27,
from include/linux/kexec.h:17,
from arch/powerpc/kernel/machine_kexec_64.c:13:
>> include/linux/bug.h:37:45: error: bit-field '<anonymous>' width not an integer constant
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
^
include/linux/compiler-gcc.h:64:28: note: in expansion of macro 'BUILD_BUG_ON_ZERO'
#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
^~~~~~~~~~~~~~~~~
include/linux/kernel.h:53:59: note: in expansion of macro '__must_be_array'
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
^~~~~~~~~~~~~~~
arch/powerpc/kernel/machine_kexec_64.c:420:18: note: in expansion of macro 'ARRAY_SIZE'
for (i = 0; i < ARRAY_SIZE(kexec_file_loaders); i++) {
^~~~~~~~~~
arch/powerpc/kernel/machine_kexec_64.c: In function 'setup_purgatory':
>> arch/powerpc/kernel/machine_kexec_64.c:568:27: error: 'SLAVE_CODE_SIZE' undeclared (first use in this function)
slave_code_buf = kmalloc(SLAVE_CODE_SIZE, GFP_KERNEL);
^~~~~~~~~~~~~~~
vim +/kexec_file_loaders +420 arch/powerpc/kernel/machine_kexec_64.c
414 struct kexec_file_ops *fops;
415
416 /* We don't support crash kernels yet. */
417 if (image->type == KEXEC_TYPE_CRASH)
418 return -ENOTSUPP;
419
> 420 for (i = 0; i < ARRAY_SIZE(kexec_file_loaders); i++) {
421 fops = kexec_file_loaders[i];
422 if (!fops || !fops->probe)
423 continue;
424
425 ret = fops->probe(buf, buf_len);
426 if (!ret) {
427 image->fops = fops;
428 return ret;
429 }
430 }
431
432 return ret;
433 }
434
435 void *arch_kexec_kernel_image_load(struct kimage *image)
436 {
437 if (!image->fops || !image->fops->load)
438 return ERR_PTR(-ENOEXEC);
439
440 return image->fops->load(image, image->kernel_buf,
441 image->kernel_buf_len, image->initrd_buf,
442 image->initrd_buf_len, image->cmdline_buf,
443 image->cmdline_buf_len);
444 }
445
446 int arch_kimage_file_post_load_cleanup(struct kimage *image)
447 {
448 if (!image->fops || !image->fops->cleanup)
449 return 0;
450
451 return image->fops->cleanup(image->image_loader_data);
452 }
453
454 /**
455 * arch_kexec_walk_mem() - call func(data) for each unreserved memory block
456 * @kbuf: Context info for the search. Also passed to @func.
457 * @func: Function to call for each memory block.
458 *
459 * This function is used by kexec_add_buffer and kexec_locate_mem_hole
460 * to find unreserved memory to load kexec segments into.
461 *
462 * Return: The memory walk will stop when func returns a non-zero value
463 * and that value will be returned. If all free regions are visited without
464 * func returning non-zero, then zero will be returned.
465 */
466 int arch_kexec_walk_mem(struct kexec_buf *kbuf, int (*func)(u64, u64, void *))
467 {
468 int ret = 0;
469 u64 i;
470 phys_addr_t mstart, mend;
471
472 if (kbuf->top_down) {
473 for_each_free_mem_range_reverse(i, NUMA_NO_NODE, 0,
474 &mstart, &mend, NULL) {
475 /*
476 * In memblock, end points to the first byte after the
477 * range while in kexec, end points to the last byte
478 * in the range.
479 */
480 ret = func(mstart, mend - 1, kbuf);
481 if (ret)
482 break;
483 }
484 } else {
485 for_each_free_mem_range(i, NUMA_NO_NODE, 0, &mstart, &mend,
486 NULL) {
487 /*
488 * In memblock, end points to the first byte after the
489 * range while in kexec, end points to the last byte
490 * in the range.
491 */
492 ret = func(mstart, mend - 1, kbuf);
493 if (ret)
494 break;
495 }
496 }
497
498 return ret;
499 }
500
501 /**
502 * arch_kexec_apply_relocations_add() - apply purgatory relocations
503 * @ehdr: Pointer to ELF headers.
504 * @sechdrs: Pointer to section headers.
505 * @relsec: Section index of SHT_RELA section.
506 *
507 * Elf64_Shdr.sh_offset has been modified to keep the pointer to the section
508 * contents, while Elf64_Shdr.sh_addr points to the final address of the
509 * section in memory.
510 */
511 int arch_kexec_apply_relocations_add(const Elf64_Ehdr *ehdr,
512 Elf64_Shdr *sechdrs, unsigned int relsec)
513 {
514 /* Section containing the relocation entries. */
515 Elf64_Shdr *rel_section = &sechdrs[relsec];
516 const Elf64_Rela *rela = (const Elf64_Rela *) rel_section->sh_offset;
517 unsigned int num_rela = rel_section->sh_size / sizeof(Elf64_Rela);
518 /* Section to which relocations apply. */
519 Elf64_Shdr *target_section = &sechdrs[rel_section->sh_info];
520 /* Associated symbol table. */
521 Elf64_Shdr *symtabsec = &sechdrs[rel_section->sh_link];
522 void *syms_base = (void *) symtabsec->sh_offset;
523 void *loc_base = (void *) target_section->sh_offset;
524 Elf64_Addr addr_base = target_section->sh_addr;
525 struct elf_info elf_info;
526 const char *strtab;
527
528 if (symtabsec->sh_link >= ehdr->e_shnum) {
529 /* Invalid strtab section number */
530 pr_err("Invalid string table section index %d\n",
531 symtabsec->sh_link);
532 return -ENOEXEC;
533 }
534 /* String table for the associated symbol table. */
535 strtab = (const char *) sechdrs[symtabsec->sh_link].sh_offset;
536
537 elf_init_elf_info(ehdr, sechdrs, &elf_info);
538
539 return elf64_apply_relocate_add(&elf_info, strtab, rela, num_rela,
540 syms_base, loc_base, addr_base,
541 true, true, "kexec purgatory");
542 }
543
544 /**
545 * setup_purgatory() - setup the purgatory runtime variables
546 * @image: kexec image.
547 * @slave_code: Slave code for the purgatory.
548 * @fdt: Flattened device tree for the next kernel.
549 * @kernel_load_addr: Address where the kernel is loaded.
550 * @fdt_load_addr: Address where the flattened device tree is loaded.
551 * @stack_top: Address where the purgatory can place its stack.
552 * @debug: Can the purgatory print messages to the console?
553 *
554 * Return: 0 on success, or negative errno on error.
555 */
556 int setup_purgatory(struct kimage *image, const void *slave_code,
557 const void *fdt, unsigned long kernel_load_addr,
558 unsigned long fdt_load_addr, unsigned long stack_top,
559 int debug)
560 {
561 int ret, tree_node;
562 const void *prop;
563 unsigned long opal_base, opal_entry;
564 uint64_t toc;
565 unsigned int *slave_code_buf, master_entry;
566 struct elf_info purg_info;
567
> 568 slave_code_buf = kmalloc(SLAVE_CODE_SIZE, GFP_KERNEL);
569 if (!slave_code_buf)
570 return -ENOMEM;
571
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 50777 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-10-24 7:25 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-12 3:22 [mmotm:master 125/157] arch/powerpc/kernel/machine_kexec_64.c:420:29: error: 'kexec_file_loaders' undeclared kbuild test robot
2016-10-24 7:24 kbuild test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox