All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH linux-next v3 08/14] ppc, crash: enforce KEXEC and KEXEC_FILE to select CRASH_DUMP
@ 2024-01-27 11:51 kernel test robot
  0 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2024-01-27 11:51 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp

:::::: 
:::::: Manual check reason: "only kconfig file changed"
:::::: 

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20240124051254.67105-9-bhe@redhat.com>
References: <20240124051254.67105-9-bhe@redhat.com>
TO: Baoquan He <bhe@redhat.com>

Hi Baoquan,

kernel test robot noticed the following build errors:

[auto build test ERROR on next-20240123]

url:    https://github.com/intel-lab-lkp/linux/commits/Baoquan-He/kexec-split-crashkernel-reservation-code-out-from-crash_core-c/20240124-131952
base:   next-20240123
patch link:    https://lore.kernel.org/r/20240124051254.67105-9-bhe%40redhat.com
patch subject: [PATCH linux-next v3 08/14] ppc, crash: enforce KEXEC and KEXEC_FILE to select CRASH_DUMP
:::::: branch date: 3 days ago
:::::: commit date: 3 days ago
config: powerpc-allnoconfig (https://download.01.org/0day-ci/archive/20240127/202401271906.ORpeFe0T-lkp@intel.com/config)
compiler: powerpc-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240127/202401271906.ORpeFe0T-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/r/202401271906.ORpeFe0T-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

   kernel/crash_core.c: In function 'kimage_crash_copy_vmcoreinfo':
>> kernel/crash_core.c:43:18: error: invalid use of undefined type 'struct kimage'
      43 |         if (image->type != KEXEC_TYPE_CRASH)
         |                  ^~
>> kernel/crash_core.c:43:28: error: 'KEXEC_TYPE_CRASH' undeclared (first use in this function); did you mean 'KEXEC_ON_CRASH'?
      43 |         if (image->type != KEXEC_TYPE_CRASH)
         |                            ^~~~~~~~~~~~~~~~
         |                            KEXEC_ON_CRASH
   kernel/crash_core.c:43:28: note: each undeclared identifier is reported only once for each function it appears in
>> kernel/crash_core.c:55:27: error: implicit declaration of function 'kimage_alloc_control_pages' [-Werror=implicit-function-declaration]
      55 |         vmcoreinfo_page = kimage_alloc_control_pages(image, 0);
         |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> kernel/crash_core.c:55:25: warning: assignment to 'struct page *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
      55 |         vmcoreinfo_page = kimage_alloc_control_pages(image, 0);
         |                         ^
   kernel/crash_core.c:66:14: error: invalid use of undefined type 'struct kimage'
      66 |         image->vmcoreinfo_data_copy = safecopy;
         |              ^~
   kernel/crash_core.c: At top level:
>> kernel/crash_core.c:74:5: error: redefinition of 'kexec_should_crash'
      74 | int kexec_should_crash(struct task_struct *p)
         |     ^~~~~~~~~~~~~~~~~~
   In file included from kernel/crash_core.c:12:
   include/linux/kexec.h:474:19: note: previous definition of 'kexec_should_crash' with type 'int(struct task_struct *)'
     474 | static inline int kexec_should_crash(struct task_struct *p) { return 0; }
         |                   ^~~~~~~~~~~~~~~~~~
>> kernel/crash_core.c:92:5: error: redefinition of 'kexec_crash_loaded'
      92 | int kexec_crash_loaded(void)
         |     ^~~~~~~~~~~~~~~~~~
   include/linux/kexec.h:475:19: note: previous definition of 'kexec_crash_loaded' with type 'int(void)'
     475 | static inline int kexec_crash_loaded(void) { return 0; }
         |                   ^~~~~~~~~~~~~~~~~~
   kernel/crash_core.c: In function 'kexec_crash_loaded':
>> kernel/crash_core.c:94:18: error: 'kexec_crash_image' undeclared (first use in this function); did you mean 'kexec_crash_loaded'?
      94 |         return !!kexec_crash_image;
         |                  ^~~~~~~~~~~~~~~~~
         |                  kexec_crash_loaded
   kernel/crash_core.c: At top level:
>> kernel/crash_core.c:103:16: error: redefinition of '__crash_kexec'
     103 | void __noclone __crash_kexec(struct pt_regs *regs)
         |                ^~~~~~~~~~~~~
   include/linux/kexec.h:472:20: note: previous definition of '__crash_kexec' with type 'void(struct pt_regs *)'
     472 | static inline void __crash_kexec(struct pt_regs *regs) { }
         |                    ^~~~~~~~~~~~~
   kernel/crash_core.c: In function '__crash_kexec':
   kernel/crash_core.c:114:21: error: 'kexec_crash_image' undeclared (first use in this function); did you mean 'kexec_crash_loaded'?
     114 |                 if (kexec_crash_image) {
         |                     ^~~~~~~~~~~~~~~~~
         |                     kexec_crash_loaded
>> kernel/crash_core.c:117:25: error: implicit declaration of function 'crash_setup_regs' [-Werror=implicit-function-declaration]
     117 |                         crash_setup_regs(&fixed_regs, regs);
         |                         ^~~~~~~~~~~~~~~~
>> kernel/crash_core.c:120:25: error: implicit declaration of function 'machine_kexec' [-Werror=implicit-function-declaration]
     120 |                         machine_kexec(kexec_crash_image);
         |                         ^~~~~~~~~~~~~
   kernel/crash_core.c: At top level:
>> kernel/crash_core.c:128:1: warning: ignoring attribute 'noinline' because it conflicts with attribute 'gnu_inline' [-Wattributes]
     128 | {
         | ^
   include/linux/kexec.h:473:20: note: previous declaration here
     473 | static inline void crash_kexec(struct pt_regs *regs) { }
         |                    ^~~~~~~~~~~
>> kernel/crash_core.c:127:18: error: redefinition of 'crash_kexec'
     127 | __bpf_kfunc void crash_kexec(struct pt_regs *regs)
         |                  ^~~~~~~~~~~
   include/linux/kexec.h:473:20: note: previous definition of 'crash_kexec' with type 'void(struct pt_regs *)'
     473 | static inline void crash_kexec(struct pt_regs *regs) { }
         |                    ^~~~~~~~~~~
   kernel/crash_core.c: In function '__crash_shrink_memory':
>> kernel/crash_core.c:356:9: error: implicit declaration of function 'crash_free_reserved_phys_range' [-Werror=implicit-function-declaration]
     356 |         crash_free_reserved_phys_range(ram_res->start, ram_res->end);
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/crash_core.c: In function 'crash_shrink_memory':
   kernel/crash_core.c:370:13: error: 'kexec_crash_image' undeclared (first use in this function); did you mean 'kexec_crash_loaded'?
     370 |         if (kexec_crash_image) {
         |             ^~~~~~~~~~~~~~~~~
         |             kexec_crash_loaded
   In file included from include/linux/kernel.h:27,
                    from arch/powerpc/include/asm/page.h:11,
                    from arch/powerpc/include/asm/thread_info.h:13,
                    from include/linux/thread_info.h:60,
                    from arch/powerpc/include/asm/processor.h:41,
                    from include/linux/sched.h:13,
                    from include/linux/utsname.h:6,
                    from kernel/crash_core.c:9:
>> kernel/crash_core.c:377:38: error: 'KEXEC_CRASH_MEM_ALIGN' undeclared (first use in this function)
     377 |         new_size = roundup(new_size, KEXEC_CRASH_MEM_ALIGN);
         |                                      ^~~~~~~~~~~~~~~~~~~~~
   include/linux/math.h:61:16: note: in definition of macro 'roundup'
      61 |         typeof(y) __y = y;                              \
         |                ^
   kernel/crash_core.c: In function 'crash_save_cpu':
>> kernel/crash_core.c:437:36: error: 'KEXEC_CORE_NOTE_NAME' undeclared (first use in this function); did you mean 'CRASH_CORE_NOTE_NAME'?
     437 |         buf = append_elf_note(buf, KEXEC_CORE_NOTE_NAME, NT_PRSTATUS,
         |                                    ^~~~~~~~~~~~~~~~~~~~
         |                                    CRASH_CORE_NOTE_NAME
   kernel/crash_core.c: In function 'kexec_crash_loaded':
>> kernel/crash_core.c:95:1: warning: control reaches end of non-void function [-Wreturn-type]
      95 | }
         | ^
   cc1: some warnings being treated as errors
--
>> arch/powerpc/kernel/crash_dump.c:101:6: error: redefinition of 'is_kdump_kernel'
     101 | bool is_kdump_kernel(void)
         |      ^~~~~~~~~~~~~~~
   In file included from arch/powerpc/kernel/crash_dump.c:12:
   include/linux/crash_dump.h:64:20: note: previous definition of 'is_kdump_kernel' with type 'bool(void)' {aka '_Bool(void)'}
      64 | static inline bool is_kdump_kernel(void)
         |                    ^~~~~~~~~~~~~~~

Kconfig warnings: (for reference only)
   WARNING: unmet direct dependencies detected for CRASH_DUMP
   Depends on [n]: ARCH_SUPPORTS_CRASH_DUMP [=y] && KEXEC_CORE [=n]
   Selected by [y]:
   - ARCH_SELECTS_KEXEC [=y]


vim +43 kernel/crash_core.c

636be0013152f6 Baoquan He 2024-01-24   35  
636be0013152f6 Baoquan He 2024-01-24   36  int kimage_crash_copy_vmcoreinfo(struct kimage *image)
636be0013152f6 Baoquan He 2024-01-24   37  {
636be0013152f6 Baoquan He 2024-01-24   38  	struct page *vmcoreinfo_page;
636be0013152f6 Baoquan He 2024-01-24   39  	void *safecopy;
636be0013152f6 Baoquan He 2024-01-24   40  
636be0013152f6 Baoquan He 2024-01-24   41  	if (!IS_ENABLED(CONFIG_CRASH_DUMP))
636be0013152f6 Baoquan He 2024-01-24   42  		return 0;
636be0013152f6 Baoquan He 2024-01-24  @43  	if (image->type != KEXEC_TYPE_CRASH)
636be0013152f6 Baoquan He 2024-01-24   44  		return 0;
636be0013152f6 Baoquan He 2024-01-24   45  
636be0013152f6 Baoquan He 2024-01-24   46  	/*
636be0013152f6 Baoquan He 2024-01-24   47  	 * For kdump, allocate one vmcoreinfo safe copy from the
636be0013152f6 Baoquan He 2024-01-24   48  	 * crash memory. as we have arch_kexec_protect_crashkres()
636be0013152f6 Baoquan He 2024-01-24   49  	 * after kexec syscall, we naturally protect it from write
636be0013152f6 Baoquan He 2024-01-24   50  	 * (even read) access under kernel direct mapping. But on
636be0013152f6 Baoquan He 2024-01-24   51  	 * the other hand, we still need to operate it when crash
636be0013152f6 Baoquan He 2024-01-24   52  	 * happens to generate vmcoreinfo note, hereby we rely on
636be0013152f6 Baoquan He 2024-01-24   53  	 * vmap for this purpose.
636be0013152f6 Baoquan He 2024-01-24   54  	 */
636be0013152f6 Baoquan He 2024-01-24  @55  	vmcoreinfo_page = kimage_alloc_control_pages(image, 0);
636be0013152f6 Baoquan He 2024-01-24   56  	if (!vmcoreinfo_page) {
636be0013152f6 Baoquan He 2024-01-24   57  		pr_warn("Could not allocate vmcoreinfo buffer\n");
636be0013152f6 Baoquan He 2024-01-24   58  		return -ENOMEM;
636be0013152f6 Baoquan He 2024-01-24   59  	}
636be0013152f6 Baoquan He 2024-01-24   60  	safecopy = vmap(&vmcoreinfo_page, 1, VM_MAP, PAGE_KERNEL);
636be0013152f6 Baoquan He 2024-01-24   61  	if (!safecopy) {
636be0013152f6 Baoquan He 2024-01-24   62  		pr_warn("Could not vmap vmcoreinfo buffer\n");
636be0013152f6 Baoquan He 2024-01-24   63  		return -ENOMEM;
636be0013152f6 Baoquan He 2024-01-24   64  	}
636be0013152f6 Baoquan He 2024-01-24   65  
636be0013152f6 Baoquan He 2024-01-24   66  	image->vmcoreinfo_data_copy = safecopy;
636be0013152f6 Baoquan He 2024-01-24   67  	crash_update_vmcoreinfo_safecopy(safecopy);
636be0013152f6 Baoquan He 2024-01-24   68  
636be0013152f6 Baoquan He 2024-01-24   69  	return 0;
636be0013152f6 Baoquan He 2024-01-24   70  }
636be0013152f6 Baoquan He 2024-01-24   71  
636be0013152f6 Baoquan He 2024-01-24   72  
636be0013152f6 Baoquan He 2024-01-24   73  
636be0013152f6 Baoquan He 2024-01-24  @74  int kexec_should_crash(struct task_struct *p)
636be0013152f6 Baoquan He 2024-01-24   75  {
636be0013152f6 Baoquan He 2024-01-24   76  	/*
636be0013152f6 Baoquan He 2024-01-24   77  	 * If crash_kexec_post_notifiers is enabled, don't run
636be0013152f6 Baoquan He 2024-01-24   78  	 * crash_kexec() here yet, which must be run after panic
636be0013152f6 Baoquan He 2024-01-24   79  	 * notifiers in panic().
636be0013152f6 Baoquan He 2024-01-24   80  	 */
636be0013152f6 Baoquan He 2024-01-24   81  	if (crash_kexec_post_notifiers)
636be0013152f6 Baoquan He 2024-01-24   82  		return 0;
636be0013152f6 Baoquan He 2024-01-24   83  	/*
636be0013152f6 Baoquan He 2024-01-24   84  	 * There are 4 panic() calls in make_task_dead() path, each of which
636be0013152f6 Baoquan He 2024-01-24   85  	 * corresponds to each of these 4 conditions.
636be0013152f6 Baoquan He 2024-01-24   86  	 */
636be0013152f6 Baoquan He 2024-01-24   87  	if (in_interrupt() || !p->pid || is_global_init(p) || panic_on_oops)
636be0013152f6 Baoquan He 2024-01-24   88  		return 1;
636be0013152f6 Baoquan He 2024-01-24   89  	return 0;
636be0013152f6 Baoquan He 2024-01-24   90  }
636be0013152f6 Baoquan He 2024-01-24   91  
636be0013152f6 Baoquan He 2024-01-24  @92  int kexec_crash_loaded(void)
636be0013152f6 Baoquan He 2024-01-24   93  {
636be0013152f6 Baoquan He 2024-01-24  @94  	return !!kexec_crash_image;
636be0013152f6 Baoquan He 2024-01-24  @95  }
636be0013152f6 Baoquan He 2024-01-24   96  EXPORT_SYMBOL_GPL(kexec_crash_loaded);
636be0013152f6 Baoquan He 2024-01-24   97  
636be0013152f6 Baoquan He 2024-01-24   98  /*
636be0013152f6 Baoquan He 2024-01-24   99   * No panic_cpu check version of crash_kexec().  This function is called
636be0013152f6 Baoquan He 2024-01-24  100   * only when panic_cpu holds the current CPU number; this is the only CPU
636be0013152f6 Baoquan He 2024-01-24  101   * which processes crash_kexec routines.
636be0013152f6 Baoquan He 2024-01-24  102   */
636be0013152f6 Baoquan He 2024-01-24 @103  void __noclone __crash_kexec(struct pt_regs *regs)
636be0013152f6 Baoquan He 2024-01-24  104  {
636be0013152f6 Baoquan He 2024-01-24  105  	/* Take the kexec_lock here to prevent sys_kexec_load
636be0013152f6 Baoquan He 2024-01-24  106  	 * running on one cpu from replacing the crash kernel
636be0013152f6 Baoquan He 2024-01-24  107  	 * we are using after a panic on a different cpu.
636be0013152f6 Baoquan He 2024-01-24  108  	 *
636be0013152f6 Baoquan He 2024-01-24  109  	 * If the crash kernel was not located in a fixed area
636be0013152f6 Baoquan He 2024-01-24  110  	 * of memory the xchg(&kexec_crash_image) would be
636be0013152f6 Baoquan He 2024-01-24  111  	 * sufficient.  But since I reuse the memory...
636be0013152f6 Baoquan He 2024-01-24  112  	 */
636be0013152f6 Baoquan He 2024-01-24  113  	if (kexec_trylock()) {
636be0013152f6 Baoquan He 2024-01-24  114  		if (kexec_crash_image) {
636be0013152f6 Baoquan He 2024-01-24  115  			struct pt_regs fixed_regs;
636be0013152f6 Baoquan He 2024-01-24  116  
636be0013152f6 Baoquan He 2024-01-24 @117  			crash_setup_regs(&fixed_regs, regs);
636be0013152f6 Baoquan He 2024-01-24  118  			crash_save_vmcoreinfo();
636be0013152f6 Baoquan He 2024-01-24  119  			machine_crash_shutdown(&fixed_regs);
636be0013152f6 Baoquan He 2024-01-24 @120  			machine_kexec(kexec_crash_image);
636be0013152f6 Baoquan He 2024-01-24  121  		}
636be0013152f6 Baoquan He 2024-01-24  122  		kexec_unlock();
636be0013152f6 Baoquan He 2024-01-24  123  	}
636be0013152f6 Baoquan He 2024-01-24  124  }
636be0013152f6 Baoquan He 2024-01-24  125  STACK_FRAME_NON_STANDARD(__crash_kexec);
636be0013152f6 Baoquan He 2024-01-24  126  
636be0013152f6 Baoquan He 2024-01-24 @127  __bpf_kfunc void crash_kexec(struct pt_regs *regs)
636be0013152f6 Baoquan He 2024-01-24 @128  {
636be0013152f6 Baoquan He 2024-01-24  129  	int old_cpu, this_cpu;
636be0013152f6 Baoquan He 2024-01-24  130  
636be0013152f6 Baoquan He 2024-01-24  131  	/*
636be0013152f6 Baoquan He 2024-01-24  132  	 * Only one CPU is allowed to execute the crash_kexec() code as with
636be0013152f6 Baoquan He 2024-01-24  133  	 * panic().  Otherwise parallel calls of panic() and crash_kexec()
636be0013152f6 Baoquan He 2024-01-24  134  	 * may stop each other.  To exclude them, we use panic_cpu here too.
636be0013152f6 Baoquan He 2024-01-24  135  	 */
636be0013152f6 Baoquan He 2024-01-24  136  	old_cpu = PANIC_CPU_INVALID;
636be0013152f6 Baoquan He 2024-01-24  137  	this_cpu = raw_smp_processor_id();
636be0013152f6 Baoquan He 2024-01-24  138  
636be0013152f6 Baoquan He 2024-01-24  139  	if (atomic_try_cmpxchg(&panic_cpu, &old_cpu, this_cpu)) {
636be0013152f6 Baoquan He 2024-01-24  140  		/* This is the 1st CPU which comes here, so go ahead. */
636be0013152f6 Baoquan He 2024-01-24  141  		__crash_kexec(regs);
636be0013152f6 Baoquan He 2024-01-24  142  
636be0013152f6 Baoquan He 2024-01-24  143  		/*
636be0013152f6 Baoquan He 2024-01-24  144  		 * Reset panic_cpu to allow another panic()/crash_kexec()
636be0013152f6 Baoquan He 2024-01-24  145  		 * call.
636be0013152f6 Baoquan He 2024-01-24  146  		 */
636be0013152f6 Baoquan He 2024-01-24  147  		atomic_set(&panic_cpu, PANIC_CPU_INVALID);
636be0013152f6 Baoquan He 2024-01-24  148  	}
636be0013152f6 Baoquan He 2024-01-24  149  }
636be0013152f6 Baoquan He 2024-01-24  150  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 6+ messages in thread
* [PATCH linux-next v3 00/14] Split crash out from kexec and clean up related config items
@ 2024-01-24  5:12 Baoquan He
  2024-01-24  5:12   ` Baoquan He
  0 siblings, 1 reply; 6+ messages in thread
From: Baoquan He @ 2024-01-24  5:12 UTC (permalink / raw)
  To: linux-kernel
  Cc: kexec, x86, linux-arm-kernel, linuxppc-dev, linux-s390, linux-sh,
	linux-mips, linux-riscv, loongarch, akpm, ebiederm, hbathini,
	piliu, viro, Baoquan He

Motivation:
=============
Previously, LKP reported a building error. When investigating, it can't
be resolved reasonablly with the present messy kdump config items.

 https://lore.kernel.org/oe-kbuild-all/202312182200.Ka7MzifQ-lkp@intel.com/

The kdump (crash dumping) related config items could causes confusions:

Firstly,
---
CRASH_CORE enables codes including
 - crashkernel reservation;
 - elfcorehdr updating;
 - vmcoreinfo exporting;
 - crash hotplug handling;

Now fadump of powerpc, kcore dynamic debugging and kdump all selects
CRASH_CORE, while fadump
 - fadump needs crashkernel parsing, vmcoreinfo exporting, and accessing
   global variable 'elfcorehdr_addr';
 - kcore only needs vmcoreinfo exporting;
 - kdump needs all of the current kernel/crash_core.c.

So only enabling PROC_CORE or FA_DUMP will enable CRASH_CORE, this
mislead people that we enable crash dumping, actual it's not.

Secondly,
---
It's not reasonable to allow KEXEC_CORE select CRASH_CORE.

Because KEXEC_CORE enables codes which allocate control pages, copy
kexec/kdump segments, and prepare for switching. These codes are
shared by both kexec reboot and kdump. We could want kexec reboot,
but disable kdump. In that case, CRASH_CORE should not be selected.

 --------------------
 CONFIG_CRASH_CORE=y
 CONFIG_KEXEC_CORE=y
 CONFIG_KEXEC=y
 CONFIG_KEXEC_FILE=y
 ---------------------

Thirdly,
---
It's not reasonable to allow CRASH_DUMP select KEXEC_CORE.

That could make KEXEC_CORE, CRASH_DUMP are enabled independently from
KEXEC or KEXEC_FILE. However, w/o KEXEC or KEXEC_FILE, the KEXEC_CORE
code built in doesn't make any sense because no kernel loading or
switching will happen to utilize the KEXEC_CORE code.
 ---------------------
 CONFIG_CRASH_CORE=y
 CONFIG_KEXEC_CORE=y
 CONFIG_CRASH_DUMP=y
 ---------------------

In this case, what is worse, on arch sh and arm, KEXEC relies on MMU,
while CRASH_DUMP can still be enabled when !MMU, then compiling error is
seen as the lkp test robot reported in above link.

 ------arch/sh/Kconfig------
 config ARCH_SUPPORTS_KEXEC
         def_bool MMU

 config ARCH_SUPPORTS_CRASH_DUMP
         def_bool BROKEN_ON_SMP
 ---------------------------

Changes:
===========
1, split out crash_reserve.c from crash_core.c;
2, split out vmcore_infoc. from crash_core.c;
3, move crash related codes in kexec_core.c into crash_core.c;
4, remove dependency of FA_DUMP on CRASH_DUMP;
5, clean up kdump related config items;
6, wrap up crash codes in crash related ifdefs on all 8 arch-es
   which support crash dumping, except of ppc;

Achievement:
===========
With above changes, I can rearrange the config item logic as below (the right
item depends on or is selected by the left item):

    PROC_KCORE -----------> VMCORE_INFO

               |----------> VMCORE_INFO
    FA_DUMP----|
               |----------> CRASH_RESERVE

                                                    ---->VMCORE_INFO
                                                   /
                                                   |---->CRASH_RESERVE
    KEXEC      --|                                /|
                 |--> KEXEC_CORE--> CRASH_DUMP-->/-|---->PROC_VMCORE
    KEXEC_FILE --|                               \ |
                                                   \---->CRASH_HOTPLUG


    KEXEC      --|
                 |--> KEXEC_CORE (for kexec reboot only)
    KEXEC_FILE --|

Test
========
On all 8 architectures, including x86_64, arm64, s390x, sh, arm, mips,
riscv, loongarch, I did below three cases of config item setting and
building all passed. Take configs on x86_64 as exampmle here:

(1) Both CONFIG_KEXEC and KEXEC_FILE is unset, then all kexec/kdump
items are unset automatically:
# Kexec and crash features
# CONFIG_KEXEC is not set
# CONFIG_KEXEC_FILE is not set
# end of Kexec and crash features

(2) set CONFIG_KEXEC_FILE and 'make olddefconfig':
---------------
# Kexec and crash features
CONFIG_CRASH_RESERVE=y
CONFIG_VMCORE_INFO=y
CONFIG_KEXEC_CORE=y
CONFIG_KEXEC_FILE=y
CONFIG_CRASH_DUMP=y
CONFIG_CRASH_HOTPLUG=y
CONFIG_CRASH_MAX_MEMORY_RANGES=8192
# end of Kexec and crash features
---------------

(3) unset CONFIG_CRASH_DUMP in case 2 and execute 'make olddefconfig':
------------------------
# Kexec and crash features
CONFIG_KEXEC_CORE=y
CONFIG_KEXEC_FILE=y
# end of Kexec and crash features
------------------------

Note:
For ppc, it needs investigation to make clear how to split out crash
code in arch folder. Hope Hari and Pingfan can help have a look, see if
it's doable. Now, I make it either have both kexec and crash enabled, or
disable both of them altogether.

Changelog
==========
v2->v3:
- In patch 2, there's conflict when rebasing to linux-next in
  kernel/crash_core.c because of below commits from Uladzislau:
  - commit 699d9351822e ("mm: vmalloc: Fix a warning in the crash_save_vmcoreinfo_init()")
  - commit 5f4c0c1e2a51 (:mm/vmalloc: remove vmap_area_list")
- In patch 13, fix the lkp reported issue by using CONFIG_CRASH_RESERVE
  ifdef, giving up the earlier IS_ENABLED(CONFIG_CRASH_RESERVE) checking in v2. 
- In patch 14, update code change after below commit merged into
  mainline:
  - commit 78de91b45860 ("LoongArch: Use generic interface to support crashkernel=X,[high,low]")

Baoquan He (14):
  kexec: split crashkernel reservation code out from crash_core.c
  crash: split vmcoreinfo exporting code out from crash_core.c
  crash: remove dependency of FA_DUMP on CRASH_DUMP
  crash: split crash dumping code out from kexec_core.c
  crash: clean up kdump related config items
  x86, crash: wrap crash dumping code into crash related ifdefs
  arm64, crash: wrap crash dumping code into crash related ifdefs
  ppc, crash: enforce KEXEC and KEXEC_FILE to select CRASH_DUMP
  s390, crash: wrap crash dumping code into crash related ifdefs
  sh, crash: wrap crash dumping code into crash related ifdefs
  mips, crash: wrap crash dumping code into crash related ifdefs
  riscv, crash: wrap crash dumping code into crash related ifdefs
  arm, crash: wrap crash dumping code into crash related ifdefs
  loongarch, crash: wrap crash dumping code into crash related ifdefs

 arch/arm/kernel/setup.c                       |   4 +-
 arch/arm64/Kconfig                            |   2 +-
 .../asm/{crash_core.h => crash_reserve.h}     |   4 +-
 arch/arm64/include/asm/kexec.h                |   2 +-
 arch/arm64/kernel/Makefile                    |   2 +-
 arch/arm64/kernel/machine_kexec.c             |   2 +-
 arch/arm64/kernel/machine_kexec_file.c        |  10 +-
 .../kernel/{crash_core.c => vmcore_info.c}    |   2 +-
 arch/arm64/mm/init.c                          |   2 +-
 arch/loongarch/kernel/setup.c                 |   2 +-
 arch/mips/kernel/setup.c                      |  17 +-
 arch/powerpc/Kconfig                          |   9 +-
 arch/powerpc/kernel/setup-common.c            |   2 +-
 arch/powerpc/mm/nohash/kaslr_booke.c          |   4 +-
 arch/powerpc/platforms/powernv/opal-core.c    |   2 +-
 arch/riscv/Kconfig                            |   2 +-
 .../asm/{crash_core.h => crash_reserve.h}     |   4 +-
 arch/riscv/kernel/Makefile                    |   2 +-
 arch/riscv/kernel/elf_kexec.c                 |   9 +-
 .../kernel/{crash_core.c => vmcore_info.c}    |   2 +-
 arch/riscv/mm/init.c                          |   2 +-
 arch/s390/kernel/kexec_elf.c                  |   2 +
 arch/s390/kernel/kexec_image.c                |   2 +
 arch/s390/kernel/machine_kexec_file.c         |  10 +
 arch/sh/kernel/machine_kexec.c                |   3 +
 arch/sh/kernel/setup.c                        |   2 +-
 arch/x86/Kconfig                              |   2 +-
 .../asm/{crash_core.h => crash_reserve.h}     |   6 +-
 arch/x86/kernel/Makefile                      |   6 +-
 arch/x86/kernel/cpu/mshyperv.c                |   4 +
 arch/x86/kernel/kexec-bzimage64.c             |   4 +
 arch/x86/kernel/kvm.c                         |   4 +-
 arch/x86/kernel/machine_kexec_64.c            |   3 +
 arch/x86/kernel/reboot.c                      |   2 +-
 arch/x86/kernel/setup.c                       |   2 +-
 arch/x86/kernel/smp.c                         |   2 +-
 .../{crash_core_32.c => vmcore_info_32.c}     |   2 +-
 .../{crash_core_64.c => vmcore_info_64.c}     |   2 +-
 arch/x86/xen/enlighten_hvm.c                  |   4 +
 drivers/base/cpu.c                            |   6 +-
 drivers/firmware/qemu_fw_cfg.c                |  14 +-
 fs/proc/Kconfig                               |   2 +-
 fs/proc/kcore.c                               |   2 +-
 include/linux/buildid.h                       |   2 +-
 include/linux/crash_core.h                    | 152 ++--
 include/linux/crash_reserve.h                 |  48 ++
 include/linux/kexec.h                         |  47 +-
 include/linux/vmcore_info.h                   |  81 ++
 init/initramfs.c                              |   2 +-
 kernel/Kconfig.kexec                          |  12 +-
 kernel/Makefile                               |   5 +-
 kernel/crash_core.c                           | 762 +++++-------------
 kernel/crash_reserve.c                        | 464 +++++++++++
 kernel/{crash_dump.c => elfcorehdr.c}         |   0
 kernel/kexec.c                                |  11 +-
 kernel/kexec_core.c                           | 250 +-----
 kernel/kexec_file.c                           |  13 +-
 kernel/kexec_internal.h                       |   2 +
 kernel/ksysfs.c                               |  10 +-
 kernel/printk/printk.c                        |   4 +-
 kernel/vmcore_info.c                          | 231 ++++++
 lib/buildid.c                                 |   2 +-
 62 files changed, 1228 insertions(+), 1043 deletions(-)
 rename arch/arm64/include/asm/{crash_core.h => crash_reserve.h} (81%)
 rename arch/arm64/kernel/{crash_core.c => vmcore_info.c} (97%)
 rename arch/riscv/include/asm/{crash_core.h => crash_reserve.h} (78%)
 rename arch/riscv/kernel/{crash_core.c => vmcore_info.c} (96%)
 rename arch/x86/include/asm/{crash_core.h => crash_reserve.h} (92%)
 rename arch/x86/kernel/{crash_core_32.c => vmcore_info_32.c} (90%)
 rename arch/x86/kernel/{crash_core_64.c => vmcore_info_64.c} (94%)
 create mode 100644 include/linux/crash_reserve.h
 create mode 100644 include/linux/vmcore_info.h
 create mode 100644 kernel/crash_reserve.c
 rename kernel/{crash_dump.c => elfcorehdr.c} (100%)
 create mode 100644 kernel/vmcore_info.c

-- 
2.41.0


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-01-27 11:51 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-27 11:51 [PATCH linux-next v3 08/14] ppc, crash: enforce KEXEC and KEXEC_FILE to select CRASH_DUMP kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2024-01-24  5:12 [PATCH linux-next v3 00/14] Split crash out from kexec and clean up related config items Baoquan He
2024-01-24  5:12 ` [PATCH linux-next v3 08/14] ppc, crash: enforce KEXEC and KEXEC_FILE to select CRASH_DUMP Baoquan He
2024-01-24  5:12   ` Baoquan He
2024-01-24  5:12   ` Baoquan He
2024-01-24  5:12   ` Baoquan He
2024-01-24  5:12   ` Baoquan He

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.