2019-08-30 07:10:06

by chenzhou

[permalink] [raw]
Subject: [PATCH v6 0/4] support reserving crashkernel above 4G on arm64 kdump

I am busy with other things, so it was a long time before this version was
released.

This patch series enable reserving crashkernel above 4G in arm64.

There are following issues in arm64 kdump:
1. We use crashkernel=X to reserve crashkernel below 4G, which will fail
when there is no enough low memory.
2. Currently, crashkernel=Y@X can be used to reserve crashkernel above 4G,
in this case, if swiotlb or DMA buffers are requierd, crash dump kernel
will boot failure because there is no low memory available for allocation.

To solve these issues, introduce crashkernel=X,low to reserve specified
size low memory.
Crashkernel=X tries to reserve memory for the crash dump kernel under
4G. If crashkernel=Y,low is specified simultaneously, reserve spcified
size low memory for crash kdump kernel devices firstly and then reserve
memory above 4G.

When crashkernel is reserved above 4G in memory, that is, crashkernel=X,low
is specified simultaneously, kernel should reserve specified size low memory
for crash dump kernel devices. So there may be two crash kernel regions, one
is below 4G, the other is above 4G.
In order to distinct from the high region and make no effect to the use of
kexec-tools, rename the low region as "Crash kernel (low)", and add DT property
"linux,low-memory-range" to crash dump kernel's dtb to pass the low region.

Besides, we need to modify kexec-tools:
arm64: kdump: add another DT property to crash dump kernel's dtb(see [1])

The previous changes and discussions can be retrieved from:

Changes since [v5]
- Move reserve_crashkernel_low() into kernel/crash_core.c.
- Delete crashkernel=X,high.
- Modify crashkernel=X,low.
If crashkernel=X,low is specified simultaneously, reserve spcified size low
memory for crash kdump kernel devices firstly and then reserve memory above 4G.
In addition, rename crashk_low_res as "Crash kernel (low)" for arm64, and then
pass to crash dump kernel by DT property "linux,low-memory-range".
- Update Documentation/admin-guide/kdump/kdump.rst.

Changes since [v4]
- Reimplement memblock_cap_memory_ranges for multiple ranges by Mike.

Changes since [v3]
- Add memblock_cap_memory_ranges back for multiple ranges.
- Fix some compiling warnings.

Changes since [v2]
- Split patch "arm64: kdump: support reserving crashkernel above 4G" as
two. Put "move reserve_crashkernel_low() into kexec_core.c" in a separate
patch.

Changes since [v1]:
- Move common reserve_crashkernel_low() code into kernel/kexec_core.c.
- Remove memblock_cap_memory_ranges() i added in v1 and implement that
in fdt_enforce_memory_region().
There are at most two crash kernel regions, for two crash kernel regions
case, we cap the memory range [min(regs[*].start), max(regs[*].end)]
and then remove the memory range in the middle.

[1]: http://lists.infradead.org/pipermail/kexec/2019-August/023569.html
[v1]: https://lkml.org/lkml/2019/4/2/1174
[v2]: https://lkml.org/lkml/2019/4/9/86
[v3]: https://lkml.org/lkml/2019/4/9/306
[v4]: https://lkml.org/lkml/2019/4/15/273
[v5]: https://lkml.org/lkml/2019/5/6/1360

Chen Zhou (4):
x86: kdump: move reserve_crashkernel_low() into crash_core.c
arm64: kdump: reserve crashkenel above 4G for crash dump kernel
arm64: kdump: add memory for devices by DT property, low-memory-range
kdump: update Documentation about crashkernel on arm64

Documentation/admin-guide/kdump/kdump.rst | 13 ++++-
Documentation/admin-guide/kernel-parameters.txt | 12 ++++-
arch/arm64/include/asm/kexec.h | 3 ++
arch/arm64/kernel/setup.c | 8 ++-
arch/arm64/mm/init.c | 61 +++++++++++++++++++++--
arch/x86/include/asm/kexec.h | 3 ++
arch/x86/kernel/setup.c | 65 +++----------------------
include/linux/crash_core.h | 4 ++
include/linux/kexec.h | 1 -
kernel/crash_core.c | 65 +++++++++++++++++++++++++
10 files changed, 168 insertions(+), 67 deletions(-)

--
2.7.4


2019-08-30 07:10:20

by chenzhou

[permalink] [raw]
Subject: [PATCH v6 3/4] arm64: kdump: add memory for devices by DT property, low-memory-range

If we want to reserve crashkernel above 4G, we could use parameters
"crashkernel=X crashkernel=Y,low", in this case, specified size low
memory is reserved for crash dump kernel devices and never mapped by
the first kernel. This memory range is advertised to crash dump kernel
via DT property under /chosen,
linux,low-memory-range=<BASE SIZE>

Crash dump kernel reads this property at boot time and call
memblock_add() after memblock_cap_memory_range() has been called.

Signed-off-by: Chen Zhou <[email protected]>
---
arch/arm64/mm/init.c | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index c99f845..a376b18 100644
--- a/arch/arm64/mm/init.c
+++ b/arch/arm64/mm/init.c
@@ -294,6 +294,26 @@ static int __init early_mem(char *p)
}
early_param("mem", early_mem);

+static int __init early_init_dt_scan_lowmem(unsigned long node,
+ const char *uname, int depth, void *data)
+{
+ struct memblock_region *lowmem = data;
+ const __be32 *reg;
+ int len;
+
+ if (depth != 1 || strcmp(uname, "chosen") != 0)
+ return 0;
+
+ reg = of_get_flat_dt_prop(node, "linux,low-memory-range", &len);
+ if (!reg || (len < (dt_root_addr_cells + dt_root_size_cells)))
+ return 1;
+
+ lowmem->base = dt_mem_next_cell(dt_root_addr_cells, &reg);
+ lowmem->size = dt_mem_next_cell(dt_root_size_cells, &reg);
+
+ return 1;
+}
+
static int __init early_init_dt_scan_usablemem(unsigned long node,
const char *uname, int depth, void *data)
{
@@ -324,13 +344,21 @@ static void __init fdt_enforce_memory_region(void)

if (reg.size)
memblock_cap_memory_range(reg.base, reg.size);
+
+ of_scan_flat_dt(early_init_dt_scan_lowmem, &reg);
+
+ if (reg.size)
+ memblock_add(reg.base, reg.size);
}

void __init arm64_memblock_init(void)
{
const s64 linear_region_size = -(s64)PAGE_OFFSET;

- /* Handle linux,usable-memory-range property */
+ /*
+ * Handle linux,usable-memory-range and linux,low-memory-range
+ * properties.
+ */
fdt_enforce_memory_region();

/* Remove memory above our supported physical address size */
--
2.7.4

2019-08-30 07:11:16

by chenzhou

[permalink] [raw]
Subject: [PATCH v6 1/4] x86: kdump: move reserve_crashkernel_low() into crash_core.c

In preparation for supporting reserve_crashkernel_low in arm64 as
x86_64 does, move reserve_crashkernel_low() into kernel/crash_core.c.

Note, in arm64, we reserve low memory if and only if crashkernel=X,low
is specified. Different with x86_64, don't set low memory automatically.

Signed-off-by: Chen Zhou <[email protected]>
---
arch/x86/include/asm/kexec.h | 3 ++
arch/x86/kernel/setup.c | 65 ++++----------------------------------------
include/linux/crash_core.h | 4 +++
include/linux/kexec.h | 1 -
kernel/crash_core.c | 65 ++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 78 insertions(+), 60 deletions(-)

diff --git a/arch/x86/include/asm/kexec.h b/arch/x86/include/asm/kexec.h
index 5e7d6b4..bf21d6c 100644
--- a/arch/x86/include/asm/kexec.h
+++ b/arch/x86/include/asm/kexec.h
@@ -18,6 +18,9 @@

# define KEXEC_CONTROL_CODE_MAX_SIZE 2048

+/* 16M alignment for crash kernel regions */
+#define CRASH_ALIGN SZ_16M
+
#ifndef __ASSEMBLY__

#include <linux/string.h>
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index bbe35bf..2b437c4 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -449,9 +449,6 @@ static void __init memblock_x86_reserve_range_setup_data(void)

#ifdef CONFIG_KEXEC_CORE

-/* 16M alignment for crash kernel regions */
-#define CRASH_ALIGN SZ_16M
-
/*
* Keep the crash kernel below this limit.
*
@@ -473,59 +470,6 @@ static void __init memblock_x86_reserve_range_setup_data(void)
# define CRASH_ADDR_HIGH_MAX SZ_64T
#endif

-static int __init reserve_crashkernel_low(void)
-{
-#ifdef CONFIG_X86_64
- unsigned long long base, low_base = 0, low_size = 0;
- unsigned long total_low_mem;
- int ret;
-
- total_low_mem = memblock_mem_size(1UL << (32 - PAGE_SHIFT));
-
- /* crashkernel=Y,low */
- ret = parse_crashkernel_low(boot_command_line, total_low_mem, &low_size, &base);
- if (ret) {
- /*
- * two parts from lib/swiotlb.c:
- * -swiotlb size: user-specified with swiotlb= or default.
- *
- * -swiotlb overflow buffer: now hardcoded to 32k. We round it
- * to 8M for other buffers that may need to stay low too. Also
- * make sure we allocate enough extra low memory so that we
- * don't run out of DMA buffers for 32-bit devices.
- */
- low_size = max(swiotlb_size_or_default() + (8UL << 20), 256UL << 20);
- } else {
- /* passed with crashkernel=0,low ? */
- if (!low_size)
- return 0;
- }
-
- low_base = memblock_find_in_range(0, 1ULL << 32, low_size, CRASH_ALIGN);
- if (!low_base) {
- pr_err("Cannot reserve %ldMB crashkernel low memory, please try smaller size.\n",
- (unsigned long)(low_size >> 20));
- return -ENOMEM;
- }
-
- ret = memblock_reserve(low_base, low_size);
- if (ret) {
- pr_err("%s: Error reserving crashkernel low memblock.\n", __func__);
- return ret;
- }
-
- pr_info("Reserving %ldMB of low memory at %ldMB for crashkernel (System low RAM: %ldMB)\n",
- (unsigned long)(low_size >> 20),
- (unsigned long)(low_base >> 20),
- (unsigned long)(total_low_mem >> 20));
-
- crashk_low_res.start = low_base;
- crashk_low_res.end = low_base + low_size - 1;
- insert_resource(&iomem_resource, &crashk_low_res);
-#endif
- return 0;
-}
-
static void __init reserve_crashkernel(void)
{
unsigned long long crash_size, crash_base, total_mem;
@@ -589,9 +533,12 @@ static void __init reserve_crashkernel(void)
return;
}

- if (crash_base >= (1ULL << 32) && reserve_crashkernel_low()) {
- memblock_free(crash_base, crash_size);
- return;
+ if (crash_base >= (1ULL << 32)) {
+ if (reserve_crashkernel_low()) {
+ memblock_free(crash_base, crash_size);
+ return;
+ }
+ insert_resource(&iomem_resource, &crashk_low_res);
}

pr_info("Reserving %ldMB of memory at %ldMB for crashkernel (System RAM: %ldMB)\n",
diff --git a/include/linux/crash_core.h b/include/linux/crash_core.h
index 525510a..9192e43 100644
--- a/include/linux/crash_core.h
+++ b/include/linux/crash_core.h
@@ -6,6 +6,8 @@
#include <linux/elfcore.h>
#include <linux/elf.h>

+#include <asm/kexec.h>
+
#define CRASH_CORE_NOTE_NAME "CORE"
#define CRASH_CORE_NOTE_HEAD_BYTES ALIGN(sizeof(struct elf_note), 4)
#define CRASH_CORE_NOTE_NAME_BYTES ALIGN(sizeof(CRASH_CORE_NOTE_NAME), 4)
@@ -63,6 +65,7 @@ phys_addr_t paddr_vmcoreinfo_note(void);
extern unsigned char *vmcoreinfo_data;
extern size_t vmcoreinfo_size;
extern u32 *vmcoreinfo_note;
+extern struct resource crashk_low_res;

Elf_Word *append_elf_note(Elf_Word *buf, char *name, unsigned int type,
void *data, size_t data_len);
@@ -74,5 +77,6 @@ int parse_crashkernel_high(char *cmdline, unsigned long long system_ram,
unsigned long long *crash_size, unsigned long long *crash_base);
int parse_crashkernel_low(char *cmdline, unsigned long long system_ram,
unsigned long long *crash_size, unsigned long long *crash_base);
+int __init reserve_crashkernel_low(void);

#endif /* LINUX_CRASH_CORE_H */
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index b9b1bc5..62330aa 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -306,7 +306,6 @@ extern int kexec_load_disabled;
/* Location of a reserved region to hold the crash kernel.
*/
extern struct resource crashk_res;
-extern struct resource crashk_low_res;
extern note_buf_t __percpu *crash_notes;

/* flag to track if kexec reboot is in progress */
diff --git a/kernel/crash_core.c b/kernel/crash_core.c
index 9f1557b..13cdf35 100644
--- a/kernel/crash_core.c
+++ b/kernel/crash_core.c
@@ -7,6 +7,8 @@
#include <linux/crash_core.h>
#include <linux/utsname.h>
#include <linux/vmalloc.h>
+#include <linux/memblock.h>
+#include <linux/swiotlb.h>

#include <asm/page.h>
#include <asm/sections.h>
@@ -292,6 +294,69 @@ int __init parse_crashkernel_low(char *cmdline,
"crashkernel=", suffix_tbl[SUFFIX_LOW]);
}

+int __init reserve_crashkernel_low(void)
+{
+#if defined(CONFIG_X86_64) || defined(CONFIG_ARM64)
+ unsigned long long base, low_base = 0, low_size = 0;
+ unsigned long total_low_mem;
+ int ret;
+
+ total_low_mem = memblock_mem_size(1UL << (32 - PAGE_SHIFT));
+
+ /* crashkernel=Y,low */
+ ret = parse_crashkernel_low(boot_command_line, total_low_mem, &low_size,
+ &base);
+ if (ret) {
+#ifdef CONFIG_X86_64
+ /*
+ * two parts from lib/swiotlb.c:
+ * -swiotlb size: user-specified with swiotlb= or default.
+ *
+ * -swiotlb overflow buffer: now hardcoded to 32k. We round it
+ * to 8M for other buffers that may need to stay low too. Also
+ * make sure we allocate enough extra low memory so that we
+ * don't run out of DMA buffers for 32-bit devices.
+ */
+ low_size = max(swiotlb_size_or_default() + (8UL << 20),
+ 256UL << 20);
+#else
+ /*
+ * in arm64, reserve low memory if and only if crashkernel=X,low
+ * specified.
+ */
+ return -EINVAL;
+#endif
+ } else {
+ /* passed with crashkernel=0,low ? */
+ if (!low_size)
+ return 0;
+ }
+
+ low_base = memblock_find_in_range(0, 1ULL << 32, low_size, CRASH_ALIGN);
+ if (!low_base) {
+ pr_err("Cannot reserve %ldMB crashkernel low memory, please try smaller size.\n",
+ (unsigned long)(low_size >> 20));
+ return -ENOMEM;
+ }
+
+ ret = memblock_reserve(low_base, low_size);
+ if (ret) {
+ pr_err("%s: Error reserving crashkernel low memblock.\n",
+ __func__);
+ return ret;
+ }
+
+ pr_info("Reserving %ldMB of low memory at %ldMB for crashkernel (System low RAM: %ldMB)\n",
+ (unsigned long)(low_size >> 20),
+ (unsigned long)(low_base >> 20),
+ (unsigned long)(total_low_mem >> 20));
+
+ crashk_low_res.start = low_base;
+ crashk_low_res.end = low_base + low_size - 1;
+#endif
+ return 0;
+}
+
Elf_Word *append_elf_note(Elf_Word *buf, char *name, unsigned int type,
void *data, size_t data_len)
{
--
2.7.4

2019-08-30 07:11:42

by chenzhou

[permalink] [raw]
Subject: [PATCH v6 2/4] arm64: kdump: reserve crashkenel above 4G for crash dump kernel

Crashkernel=X tries to reserve memory for the crash dump kernel under
4G. If crashkernel=X,low is specified simultaneously, reserve spcified
size low memory for crash kdump kernel devices firstly and then reserve
memory above 4G.

Signed-off-by: Chen Zhou <[email protected]>
---
arch/arm64/include/asm/kexec.h | 3 +++
arch/arm64/kernel/setup.c | 8 +++++++-
arch/arm64/mm/init.c | 31 +++++++++++++++++++++++++++++--
3 files changed, 39 insertions(+), 3 deletions(-)

diff --git a/arch/arm64/include/asm/kexec.h b/arch/arm64/include/asm/kexec.h
index 12a561a..88279a9 100644
--- a/arch/arm64/include/asm/kexec.h
+++ b/arch/arm64/include/asm/kexec.h
@@ -25,6 +25,9 @@

#define KEXEC_ARCH KEXEC_ARCH_AARCH64

+/* 2M alignment for crash kernel regions */
+#define CRASH_ALIGN SZ_2M
+
#ifndef __ASSEMBLY__

/**
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
index 9c4bad7..2ead608 100644
--- a/arch/arm64/kernel/setup.c
+++ b/arch/arm64/kernel/setup.c
@@ -231,7 +231,13 @@ static void __init request_standard_resources(void)
kernel_data.end <= res->end)
request_resource(res, &kernel_data);
#ifdef CONFIG_KEXEC_CORE
- /* Userspace will find "Crash kernel" region in /proc/iomem. */
+ /*
+ * Userspace will find "Crash kernel" region in /proc/iomem.
+ * Note: the low region is renamed as Crash kernel (low).
+ */
+ if (crashk_low_res.end && crashk_low_res.start >= res->start &&
+ crashk_low_res.end <= res->end)
+ request_resource(res, &crashk_low_res);
if (crashk_res.end && crashk_res.start >= res->start &&
crashk_res.end <= res->end)
request_resource(res, &crashk_res);
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index f3c7952..c99f845 100644
--- a/arch/arm64/mm/init.c
+++ b/arch/arm64/mm/init.c
@@ -64,6 +64,7 @@ static void __init reserve_crashkernel(void)
{
unsigned long long crash_base, crash_size;
int ret;
+ phys_addr_t crash_max = ARCH_LOW_ADDRESS_LIMIT;

ret = parse_crashkernel(boot_command_line, memblock_phys_mem_size(),
&crash_size, &crash_base);
@@ -71,12 +72,38 @@ static void __init reserve_crashkernel(void)
if (ret || !crash_size)
return;

+ ret = reserve_crashkernel_low();
+ if (!ret && crashk_low_res.end) {
+ /*
+ * If crashkernel=X,low specified, there may be two regions,
+ * we need to make some changes as follows:
+ *
+ * 1. rename the low region as "Crash kernel (low)"
+ * In order to distinct from the high region and make no effect
+ * to the use of existing kexec-tools, rename the low region as
+ * "Crash kernel (low)".
+ *
+ * 2. change the upper bound for crash memory
+ * Set MEMBLOCK_ALLOC_ACCESSIBLE upper bound for crash memory.
+ *
+ * 3. mark the low region as "nomap"
+ * The low region is intended to be used for crash dump kernel
+ * devices, just mark the low region as "nomap" simply.
+ */
+ const char *rename = "Crash kernel (low)";
+
+ crashk_low_res.name = rename;
+ crash_max = MEMBLOCK_ALLOC_ACCESSIBLE;
+ memblock_mark_nomap(crashk_low_res.start,
+ resource_size(&crashk_low_res));
+ }
+
crash_size = PAGE_ALIGN(crash_size);

if (crash_base == 0) {
/* Current arm64 boot protocol requires 2MB alignment */
- crash_base = memblock_find_in_range(0, ARCH_LOW_ADDRESS_LIMIT,
- crash_size, SZ_2M);
+ crash_base = memblock_find_in_range(0, crash_max, crash_size,
+ SZ_2M);
if (crash_base == 0) {
pr_warn("cannot allocate crashkernel (size:0x%llx)\n",
crash_size);
--
2.7.4

2019-08-30 07:32:17

by chenzhou

[permalink] [raw]
Subject: [PATCH v6 4/4] kdump: update Documentation about crashkernel on arm64

Now we support crashkernel=X,[low] on arm64, update the Documentation.

Signed-off-by: Chen Zhou <[email protected]>
---
Documentation/admin-guide/kdump/kdump.rst | 13 +++++++++++--
Documentation/admin-guide/kernel-parameters.txt | 12 +++++++++++-
2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/Documentation/admin-guide/kdump/kdump.rst b/Documentation/admin-guide/kdump/kdump.rst
index ac7e131..e55173e 100644
--- a/Documentation/admin-guide/kdump/kdump.rst
+++ b/Documentation/admin-guide/kdump/kdump.rst
@@ -299,7 +299,13 @@ Boot into System Kernel
"crashkernel=64M@16M" tells the system kernel to reserve 64 MB of memory
starting at physical address 0x01000000 (16MB) for the dump-capture kernel.

- On x86 and x86_64, use "crashkernel=64M@16M".
+ On x86 use "crashkernel=64M@16M".
+
+ On x86_64, use "crashkernel=Y[@X]" to select a region under 4G first, and
+ fall back to reserve region above 4G when '@offset' hasn't been specified.
+ We can also use "crashkernel=X,high" to select a region above 4G, which
+ also tries to allocate at least 256M below 4G automatically and
+ "crashkernel=Y,low" can be used to allocate specified size low memory.

On ppc64, use "crashkernel=128M@32M".

@@ -316,8 +322,11 @@ Boot into System Kernel
kernel will automatically locate the crash kernel image within the
first 512MB of RAM if X is not given.

- On arm64, use "crashkernel=Y[@X]". Note that the start address of
+ On arm64, use "crashkernel=Y[@X]". Note that the start address of
the kernel, X if explicitly specified, must be aligned to 2MiB (0x200000).
+ If crashkernel=Z,low is specified simultaneously, reserve spcified size
+ low memory for crash kdump kernel devices firstly and then reserve memory
+ above 4G.

Load the Dump-capture Kernel
============================
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 4c19719..069a122 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -708,6 +708,9 @@
[KNL, x86_64] select a region under 4G first, and
fall back to reserve region above 4G when '@offset'
hasn't been specified.
+ [KNL, arm64] If crashkernel=X,low is specified, reserve
+ spcified size low memory for crash kdump kernel devices
+ firstly, and then reserve memory above 4G.
See Documentation/admin-guide/kdump/kdump.rst for further details.

crashkernel=range1:size1[,range2:size2,...][@offset]
@@ -732,12 +735,19 @@
requires at least 64M+32K low memory, also enough extra
low memory is needed to make sure DMA buffers for 32-bit
devices won't run out. Kernel would try to allocate at
- at least 256M below 4G automatically.
+ least 256M below 4G automatically.
This one let user to specify own low range under 4G
for second kernel instead.
0: to disable low allocation.
It will be ignored when crashkernel=X,high is not used
or memory reserved is below 4G.
+ [KNL, arm64] range under 4G.
+ This one let user to specify own low range under 4G
+ for crash dump kernel instead.
+ Different with x86_64, kernel allocates specified size
+ physical memory region only when this parameter is specified
+ instead of trying to allocate at least 256M below 4G
+ automatically.

cryptomgr.notests
[KNL] Disable crypto self-tests
--
2.7.4

2019-08-31 23:13:50

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v6 1/4] x86: kdump: move reserve_crashkernel_low() into crash_core.c

Hi Chen,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[cannot apply to v5.3-rc6 next-20190830]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Chen-Zhou/support-reserving-crashkernel-above-4G-on-arm64-kdump/20190901-053351
config: x86_64-randconfig-s0-09010004 (attached as .config)
compiler: gcc-7 (Debian 7.4.0-11) 7.4.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <[email protected]>

All errors (new ones prefixed by >>):

ld: kernel/crash_core.o: in function `reserve_crashkernel_low':
>> kernel/crash_core.c:354: undefined reference to `crashk_low_res'
>> ld: kernel/crash_core.c:355: undefined reference to `crashk_low_res'

vim +354 kernel/crash_core.c

296
297 int __init reserve_crashkernel_low(void)
298 {
299 #if defined(CONFIG_X86_64) || defined(CONFIG_ARM64)
300 unsigned long long base, low_base = 0, low_size = 0;
301 unsigned long total_low_mem;
302 int ret;
303
304 total_low_mem = memblock_mem_size(1UL << (32 - PAGE_SHIFT));
305
306 /* crashkernel=Y,low */
307 ret = parse_crashkernel_low(boot_command_line, total_low_mem, &low_size,
308 &base);
309 if (ret) {
310 #ifdef CONFIG_X86_64
311 /*
312 * two parts from lib/swiotlb.c:
313 * -swiotlb size: user-specified with swiotlb= or default.
314 *
315 * -swiotlb overflow buffer: now hardcoded to 32k. We round it
316 * to 8M for other buffers that may need to stay low too. Also
317 * make sure we allocate enough extra low memory so that we
318 * don't run out of DMA buffers for 32-bit devices.
319 */
320 low_size = max(swiotlb_size_or_default() + (8UL << 20),
321 256UL << 20);
322 #else
323 /*
324 * in arm64, reserve low memory if and only if crashkernel=X,low
325 * specified.
326 */
327 return -EINVAL;
328 #endif
329 } else {
330 /* passed with crashkernel=0,low ? */
331 if (!low_size)
332 return 0;
333 }
334
335 low_base = memblock_find_in_range(0, 1ULL << 32, low_size, CRASH_ALIGN);
336 if (!low_base) {
337 pr_err("Cannot reserve %ldMB crashkernel low memory, please try smaller size.\n",
338 (unsigned long)(low_size >> 20));
339 return -ENOMEM;
340 }
341
342 ret = memblock_reserve(low_base, low_size);
343 if (ret) {
344 pr_err("%s: Error reserving crashkernel low memblock.\n",
345 __func__);
346 return ret;
347 }
348
349 pr_info("Reserving %ldMB of low memory at %ldMB for crashkernel (System low RAM: %ldMB)\n",
350 (unsigned long)(low_size >> 20),
351 (unsigned long)(low_base >> 20),
352 (unsigned long)(total_low_mem >> 20));
353
> 354 crashk_low_res.start = low_base;
> 355 crashk_low_res.end = low_base + low_size - 1;
356 #endif
357 return 0;
358 }
359

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation


Attachments:
(No filename) (3.30 kB)
.config.gz (34.76 kB)
Download all attachments

2019-08-31 23:50:27

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v6 1/4] x86: kdump: move reserve_crashkernel_low() into crash_core.c

Hi Chen,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[cannot apply to v5.3-rc6 next-20190830]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Chen-Zhou/support-reserving-crashkernel-above-4G-on-arm64-kdump/20190901-053351
config: um-i386_defconfig (attached as .config)
compiler: gcc-7 (Debian 7.4.0-11) 7.4.0
reproduce:
# save the attached .config to linux build tree
make ARCH=um SUBARCH=i386

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <[email protected]>

All errors (new ones prefixed by >>):

In file included from include/linux/crash_core.h:9:0,
from kernel//printk/printk.c:37:
arch/x86/include/asm/kexec.h: In function 'crash_setup_regs':
arch/x86/include/asm/kexec.h:88:46: error: 'struct pt_regs' has no member named 'bx'
asm volatile("movl %%ebx,%0" : "=m"(newregs->bx));
^~
arch/x86/include/asm/kexec.h:89:46: error: 'struct pt_regs' has no member named 'cx'
asm volatile("movl %%ecx,%0" : "=m"(newregs->cx));
^~
arch/x86/include/asm/kexec.h:90:46: error: 'struct pt_regs' has no member named 'dx'
asm volatile("movl %%edx,%0" : "=m"(newregs->dx));
^~
arch/x86/include/asm/kexec.h:91:46: error: 'struct pt_regs' has no member named 'si'
asm volatile("movl %%esi,%0" : "=m"(newregs->si));
^~
arch/x86/include/asm/kexec.h:92:46: error: 'struct pt_regs' has no member named 'di'
asm volatile("movl %%edi,%0" : "=m"(newregs->di));
^~
arch/x86/include/asm/kexec.h:93:46: error: 'struct pt_regs' has no member named 'bp'
asm volatile("movl %%ebp,%0" : "=m"(newregs->bp));
^~
arch/x86/include/asm/kexec.h:94:46: error: 'struct pt_regs' has no member named 'ax'
asm volatile("movl %%eax,%0" : "=m"(newregs->ax));
^~
arch/x86/include/asm/kexec.h:95:46: error: 'struct pt_regs' has no member named 'sp'
asm volatile("movl %%esp,%0" : "=m"(newregs->sp));
^~
arch/x86/include/asm/kexec.h:96:49: error: 'struct pt_regs' has no member named 'ss'
asm volatile("movl %%ss, %%eax;" :"=a"(newregs->ss));
^~
arch/x86/include/asm/kexec.h:97:49: error: 'struct pt_regs' has no member named 'cs'
asm volatile("movl %%cs, %%eax;" :"=a"(newregs->cs));
^~
>> arch/x86/include/asm/kexec.h:98:49: error: 'struct pt_regs' has no member named 'ds'
asm volatile("movl %%ds, %%eax;" :"=a"(newregs->ds));
^~
>> arch/x86/include/asm/kexec.h:99:51: error: 'struct pt_regs' has no member named 'es'; did you mean 'regs'?
asm volatile("movl %%es, %%eax;" :"=a"(newregs->es));
^~
regs
arch/x86/include/asm/kexec.h:100:47: error: 'struct pt_regs' has no member named 'flags'
asm volatile("pushfl; popl %0" :"=m"(newregs->flags));
^~
arch/x86/include/asm/kexec.h:122:10: error: 'struct pt_regs' has no member named 'ip'
newregs->ip = _THIS_IP_;
^~

vim +98 arch/x86/include/asm/kexec.h

dd5f726076cc76 arch/x86/include/asm/kexec.h Vivek Goyal 2014-08-08 75
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 76 /*
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 77 * This function is responsible for capturing register states if coming
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 78 * via panic otherwise just fix up the ss and sp if coming via kernel
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 79 * mode exception.
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 80 */
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 81 static inline void crash_setup_regs(struct pt_regs *newregs,
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 82 struct pt_regs *oldregs)
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 83 {
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 84 if (oldregs) {
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 85 memcpy(newregs, oldregs, sizeof(*newregs));
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 86 } else {
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 87 #ifdef CONFIG_X86_32
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 88 asm volatile("movl %%ebx,%0" : "=m"(newregs->bx));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 89 asm volatile("movl %%ecx,%0" : "=m"(newregs->cx));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 90 asm volatile("movl %%edx,%0" : "=m"(newregs->dx));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 91 asm volatile("movl %%esi,%0" : "=m"(newregs->si));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 92 asm volatile("movl %%edi,%0" : "=m"(newregs->di));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 93 asm volatile("movl %%ebp,%0" : "=m"(newregs->bp));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 94 asm volatile("movl %%eax,%0" : "=m"(newregs->ax));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 @95 asm volatile("movl %%esp,%0" : "=m"(newregs->sp));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 @96 asm volatile("movl %%ss, %%eax;" :"=a"(newregs->ss));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 97 asm volatile("movl %%cs, %%eax;" :"=a"(newregs->cs));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 @98 asm volatile("movl %%ds, %%eax;" :"=a"(newregs->ds));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 @99 asm volatile("movl %%es, %%eax;" :"=a"(newregs->es));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 100 asm volatile("pushfl; popl %0" :"=m"(newregs->flags));
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 101 #else
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 102 asm volatile("movq %%rbx,%0" : "=m"(newregs->bx));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 103 asm volatile("movq %%rcx,%0" : "=m"(newregs->cx));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 104 asm volatile("movq %%rdx,%0" : "=m"(newregs->dx));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 105 asm volatile("movq %%rsi,%0" : "=m"(newregs->si));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 106 asm volatile("movq %%rdi,%0" : "=m"(newregs->di));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 107 asm volatile("movq %%rbp,%0" : "=m"(newregs->bp));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 108 asm volatile("movq %%rax,%0" : "=m"(newregs->ax));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 109 asm volatile("movq %%rsp,%0" : "=m"(newregs->sp));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 110 asm volatile("movq %%r8,%0" : "=m"(newregs->r8));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 111 asm volatile("movq %%r9,%0" : "=m"(newregs->r9));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 112 asm volatile("movq %%r10,%0" : "=m"(newregs->r10));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 113 asm volatile("movq %%r11,%0" : "=m"(newregs->r11));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 114 asm volatile("movq %%r12,%0" : "=m"(newregs->r12));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 115 asm volatile("movq %%r13,%0" : "=m"(newregs->r13));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 116 asm volatile("movq %%r14,%0" : "=m"(newregs->r14));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 117 asm volatile("movq %%r15,%0" : "=m"(newregs->r15));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 118 asm volatile("movl %%ss, %%eax;" :"=a"(newregs->ss));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 119 asm volatile("movl %%cs, %%eax;" :"=a"(newregs->cs));
b69a3f9dc0bbdb include/asm-x86/kexec.h Joe Perches 2008-03-23 120 asm volatile("pushfq; popq %0" :"=m"(newregs->flags));
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 121 #endif
de0d22e50cd3d5 arch/x86/include/asm/kexec.h Nick Desaulniers 2018-10-30 122 newregs->ip = _THIS_IP_;
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 123 }
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 124 }
3c233d1334ffc8 include/asm-x86/kexec.h Harvey Harrison 2008-01-30 125

:::::: The code at line 98 was first introduced by commit
:::::: b69a3f9dc0bbdbf9278ac5bc8d4b6347c11a701b include/asm-x86/kexec.h: checkpatch cleanups - formatting only

:::::: TO: Joe Perches <[email protected]>
:::::: CC: Ingo Molnar <[email protected]>

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation


Attachments:
(No filename) (10.13 kB)
.config.gz (8.26 kB)
Download all attachments

2019-12-19 01:37:35

by chenzhou

[permalink] [raw]
Subject: Re: [PATCH v6 0/4] support reserving crashkernel above 4G on arm64 kdump

Hi Will

On 2019/12/18 17:09, Will Deacon wrote:
> On Wed, Dec 18, 2019 at 10:07:59AM +0800, Chen Zhou wrote:
>> Friendly ping...
>
> You broke the build:
>
> https://lore.kernel.org/lkml/201909010744.CDe940pv%[email protected]
> https://lore.kernel.org/lkml/201909010704.4m9y2sg7%[email protected]
>
> So I doubt anybody will seriously look at this.

I was also waiting for other suggestions.
I will fix this in next version.

>
> Will
>
> .

Thanks,
Chen Zhou

2019-12-19 02:57:41

by chenzhou

[permalink] [raw]
Subject: Re: [PATCH v6 0/4] support reserving crashkernel above 4G on arm64 kdump

Hi John,

On 2019/12/19 1:18, John Donnelly wrote:
> HI
>
> SEE INLINE ON A QUESTION :
>
>> On Dec 17, 2019, at 8:07 PM, Chen Zhou <[email protected]> wrote:
>>
>> Hi all,
>>
>> Friendly ping...
>>
>> On 2019/8/30 15:11, Chen Zhou wrote:
>>> I am busy with other things, so it was a long time before this version was
>>> released.
>>>
>>> This patch series enable reserving crashkernel above 4G in arm64.
>>>
>>> There are following issues in arm64 kdump:
>>> 1. We use crashkernel=X to reserve crashkernel below 4G, which will fail
>>> when there is no enough low memory.
>>> 2. Currently, crashkernel=Y@X can be used to reserve crashkernel above 4G,
>>> in this case, if swiotlb or DMA buffers are requierd, crash dump kernel
>>> will boot failure because there is no low memory available for allocation.
>
>
> Can you elaborate when the boot failures may fail due to lacking swiotlb or DMA buffers ? Are these related to certain adapters or specific platforms ?
>
> I have not seen this when using crashkernel=2024M@35GB .
>

For example, in my environment "Huawei TaiShan 2280",
we need to use mpt3sas driver in crash dump kernel for dumping vmcore.

mpt3sas driver needs to call dma_pool_alloc to allocate some pages,
if there is no DMA buffer, page allocation will fail, which leads to crash dump kernel boot failure,
like this:

[2019/12/19 9:12:41] [ 12.403501] mpt3sas_cm0: diag reset: SUCCESS
[2019/12/19 9:12:41] [ 12.456076] mpt3sas_cm0: reply_post_free pool: dma_pool_alloc failed
[2019/12/19 9:12:41] [ 12.462515] pci 0004:48:00.0: can't derive routing for PCI INT A
[2019/12/19 9:12:41] [ 12.468761] mpt3sas 0004:49:00.0: PCI INT A: no GSI
[2019/12/19 9:12:41] [ 12.476348] mpt3sas_cm0: failure at drivers/scsi/mpt3sas/mpt3sas_scsih.c:10626/_scsih_probe()!
[2019/12/19 9:14:38] [ TIME ] Timed out waiting for device dev-di?b3\x2d890a\x2d2ead7df26f48.device.
[2019/12/19 9:14:38] [DEPEND] Dependency failed for Initrd Root Device.
[2019/12/19 9:14:38] [DEPEND] Dependency failed for /sysroot.
[2019/12/19 9:14:38] [DEPEND] Dependency failed for Initrd Root File System.
[2019/12/19 9:14:38] [DEPEND] Dependency failed for Reload Configuration from the Real Root.
[2019/12/19 9:14:38] [DEPEND] Dependency failed for File System C?40bae-9eb8-46b3-890a-2ead7df26f48.

Thanks,
Chen Zhou

>
>>>
>>> To solve these issues, introduce crashkernel=X,low to reserve specified
>>> size low memory.
>>> Crashkernel=X tries to reserve memory for the crash dump kernel under
>>> 4G. If crashkernel=Y,low is specified simultaneously, reserve spcified
>>> size low memory for crash kdump kernel devices firstly and then reserve
>>> memory above 4G.
>>>
>>> When crashkernel is reserved above 4G in memory, that is, crashkernel=X,low
>>> is specified simultaneously, kernel should reserve specified size low memory
>>> for crash dump kernel devices. So there may be two crash kernel regions, one
>>> is below 4G, the other is above 4G.
>>> In order to distinct from the high region and make no effect to the use of
>>> kexec-tools, rename the low region as "Crash kernel (low)", and add DT property
>>> "linux,low-memory-range" to crash dump kernel's dtb to pass the low region.
>>>
>>> Besides, we need to modify kexec-tools:
>>> arm64: kdump: add another DT property to crash dump kernel's dtb(see [1])
>>>
>>> The previous changes and discussions can be retrieved from:
>>>
>>> Changes since [v5]
>>> - Move reserve_crashkernel_low() into kernel/crash_core.c.
>>> - Delete crashkernel=X,high.
>>> - Modify crashkernel=X,low.
>>> If crashkernel=X,low is specified simultaneously, reserve spcified size low
>>> memory for crash kdump kernel devices firstly and then reserve memory above 4G.
>>> In addition, rename crashk_low_res as "Crash kernel (low)" for arm64, and then
>>> pass to crash dump kernel by DT property "linux,low-memory-range".
>>> - Update Documentation/admin-guide/kdump/kdump.rst.
>>>
>>> Changes since [v4]
>>> - Reimplement memblock_cap_memory_ranges for multiple ranges by Mike.
>>>
>>> Changes since [v3]
>>> - Add memblock_cap_memory_ranges back for multiple ranges.
>>> - Fix some compiling warnings.
>>>
>>> Changes since [v2]
>>> - Split patch "arm64: kdump: support reserving crashkernel above 4G" as
>>> two. Put "move reserve_crashkernel_low() into kexec_core.c" in a separate
>>> patch.
>>>
>>> Changes since [v1]:
>>> - Move common reserve_crashkernel_low() code into kernel/kexec_core.c.
>>> - Remove memblock_cap_memory_ranges() i added in v1 and implement that
>>> in fdt_enforce_memory_region().
>>> There are at most two crash kernel regions, for two crash kernel regions
>>> case, we cap the memory range [min(regs[*].start), max(regs[*].end)]
>>> and then remove the memory range in the middle.
>>>
>>> [1]: https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.infradead.org_pipermail_kexec_2019-2DAugust_023569.html&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=9tn9kUBabiuYhVtXauANSDGaISnCnHLYcAUQgsPBFxs&e=
>>> [v1]: https://urldefense.proofpoint.com/v2/url?u=https-3A__lkml.org_lkml_2019_4_2_1174&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=F-lM7II2cuMF_sK3b6-QhSbWM3X-pI_WZEs0sZitS7A&e=
>>> [v2]: https://urldefense.proofpoint.com/v2/url?u=https-3A__lkml.org_lkml_2019_4_9_86&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=5Y-S6sqMTklHkOQsNtjTX3C7pV05BjKLGhJVfMHEvDs&e=
>>> [v3]: https://urldefense.proofpoint.com/v2/url?u=https-3A__lkml.org_lkml_2019_4_9_306&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=cWn4zSRQupaZ3jjz4eDvD-pNkoLyL_hsZoRx4yJoD0c&e=
>>> [v4]: https://urldefense.proofpoint.com/v2/url?u=https-3A__lkml.org_lkml_2019_4_15_273&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=Nslk4RJKIyIuT0IoQoolXNjupEDXplPhQQwnTSoXNWE&e=
>>> [v5]: https://urldefense.proofpoint.com/v2/url?u=https-3A__lkml.org_lkml_2019_5_6_1360&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=HJVAM6sCxV2DnNg5d4pw8WPqtkmQnKvztEmkSIgtQ5M&e=
>>>
>>> Chen Zhou (4):
>>> x86: kdump: move reserve_crashkernel_low() into crash_core.c
>>> arm64: kdump: reserve crashkenel above 4G for crash dump kernel
>>> arm64: kdump: add memory for devices by DT property, low-memory-range
>>> kdump: update Documentation about crashkernel on arm64
>>>
>>> Documentation/admin-guide/kdump/kdump.rst | 13 ++++-
>>> Documentation/admin-guide/kernel-parameters.txt | 12 ++++-
>>> arch/arm64/include/asm/kexec.h | 3 ++
>>> arch/arm64/kernel/setup.c | 8 ++-
>>> arch/arm64/mm/init.c | 61 +++++++++++++++++++++--
>>> arch/x86/include/asm/kexec.h | 3 ++
>>> arch/x86/kernel/setup.c | 65 +++----------------------
>>> include/linux/crash_core.h | 4 ++
>>> include/linux/kexec.h | 1 -
>>> kernel/crash_core.c | 65 +++++++++++++++++++++++++
>>> 10 files changed, 168 insertions(+), 67 deletions(-)
>>>
>>
>>
>> _______________________________________________
>> kexec mailing list
>> [email protected]
>> https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.infradead.org_mailman_listinfo_kexec&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=XMcFx61B_QPg-FUfG_-t88DKCnGm4grqu6zRguiHYrU&e=
>
>
> .
>

2019-12-19 18:35:44

by John Donnelly

[permalink] [raw]
Subject: `



> On Dec 18, 2019, at 8:56 PM, Chen Zhou <[email protected]> wrote:
>
> Hi John,
>
> On 2019/12/19 1:18, John Donnelly wrote:
>> HI
>>
>> SEE INLINE ON A QUESTION :
>>
>>> On Dec 17, 2019, at 8:07 PM, Chen Zhou <[email protected]> wrote:
>>>
>>> Hi all,
>>>
>>> Friendly ping...
>>>
>>> On 2019/8/30 15:11, Chen Zhou wrote:
>>>> I am busy with other things, so it was a long time before this version was
>>>> released.
>>>>
>>>> This patch series enable reserving crashkernel above 4G in arm64.
>>>>
>>>> There are following issues in arm64 kdump:
>>>> 1. We use crashkernel=X to reserve crashkernel below 4G, which will fail
>>>> when there is no enough low memory.
>>>> 2. Currently, crashkernel=Y@X can be used to reserve crashkernel above 4G,
>>>> in this case, if swiotlb or DMA buffers are requierd, crash dump kernel
>>>> will boot failure because there is no low memory available for allocation.
>>
>>
>> Can you elaborate when the boot failures may fail due to lacking swiotlb or DMA buffers ? Are these related to certain adapters or specific platforms ?
>>
>> I have not seen this when using crashkernel=2024M@35GB .
>>
>
> For example, in my environment "Huawei TaiShan 2280",
> we need to use mpt3sas driver in crash dump kernel for dumping vmcore.
>
> mpt3sas driver needs to call dma_pool_alloc to allocate some pages,
> if there is no DMA buffer, page allocation will fail, which leads to crash dump kernel boot failure,
> like this:
>
> [2019/12/19 9:12:41] [ 12.403501] mpt3sas_cm0: diag reset: SUCCESS
> [2019/12/19 9:12:41] [ 12.456076] mpt3sas_cm0: reply_post_free pool: dma_pool_alloc failed
> [2019/12/19 9:12:41] [ 12.462515] pci 0004:48:00.0: can't derive routing for PCI INT A
> [2019/12/19 9:12:41] [ 12.468761] mpt3sas 0004:49:00.0: PCI INT A: no GSI
> [2019/12/19 9:12:41] [ 12.476348] mpt3sas_cm0: failure at drivers/scsi/mpt3sas/mpt3sas_scsih.c:10626/_scsih_probe()!
> [2019/12/19 9:14:38] [ TIME ] Timed out waiting for device dev-di…b3\x2d890a\x2d2ead7df26f48.device.
> [2019/12/19 9:14:38] [DEPEND] Dependency failed for Initrd Root Device.
> [2019/12/19 9:14:38] [DEPEND] Dependency failed for /sysroot.
> [2019/12/19 9:14:38] [DEPEND] Dependency failed for Initrd Root File System.
> [2019/12/19 9:14:38] [DEPEND] Dependency failed for Reload Configuration from the Real Root.
> [2019/12/19 9:14:38] [DEPEND] Dependency failed for File System C…40bae-9eb8-46b3-890a-2ead7df26f48.


Thank you for sharing . We are not seeing this issue on a 5.4.0.rc8 ; Like I said in a previous email we can take crash dumps using crashkernel=768M for a “ standard “ small VMcore to local storage :

0004:01:00.0 RAID bus controller: Broadcom / LSI MegaRAID SAS-3 3316 [Intruder] (rev 01)
Subsystem: Broadcom / LSI MegaRAID SAS 9361-16i
Kernel driver in use: megaraid_sas


What version of the kernel are you using ?


>
> Thanks,
> Chen Zhou
>
>>
>>>>
>>>> To solve these issues, introduce crashkernel=X,low to reserve specified
>>>> size low memory.
>>>> Crashkernel=X tries to reserve memory for the crash dump kernel under
>>>> 4G. If crashkernel=Y,low is specified simultaneously, reserve spcified
>>>> size low memory for crash kdump kernel devices firstly and then reserve
>>>> memory above 4G.
>>>>
>>>> When crashkernel is reserved above 4G in memory, that is, crashkernel=X,low
>>>> is specified simultaneously, kernel should reserve specified size low memory
>>>> for crash dump kernel devices. So there may be two crash kernel regions, one
>>>> is below 4G, the other is above 4G.
>>>> In order to distinct from the high region and make no effect to the use of
>>>> kexec-tools, rename the low region as "Crash kernel (low)", and add DT property
>>>> "linux,low-memory-range" to crash dump kernel's dtb to pass the low region.
>>>>
>>>> Besides, we need to modify kexec-tools:
>>>> arm64: kdump: add another DT property to crash dump kernel's dtb(see [1])
>>>>
>>>> The previous changes and discussions can be retrieved from:
>>>>
>>>> Changes since [v5]
>>>> - Move reserve_crashkernel_low() into kernel/crash_core.c.
>>>> - Delete crashkernel=X,high.
>>>> - Modify crashkernel=X,low.
>>>> If crashkernel=X,low is specified simultaneously, reserve spcified size low
>>>> memory for crash kdump kernel devices firstly and then reserve memory above 4G.
>>>> In addition, rename crashk_low_res as "Crash kernel (low)" for arm64, and then
>>>> pass to crash dump kernel by DT property "linux,low-memory-range".
>>>> - Update Documentation/admin-guide/kdump/kdump.rst.
>>>>
>>>> Changes since [v4]
>>>> - Reimplement memblock_cap_memory_ranges for multiple ranges by Mike.
>>>>
>>>> Changes since [v3]
>>>> - Add memblock_cap_memory_ranges back for multiple ranges.
>>>> - Fix some compiling warnings.
>>>>
>>>> Changes since [v2]
>>>> - Split patch "arm64: kdump: support reserving crashkernel above 4G" as
>>>> two. Put "move reserve_crashkernel_low() into kexec_core.c" in a separate
>>>> patch.
>>>>
>>>> Changes since [v1]:
>>>> - Move common reserve_crashkernel_low() code into kernel/kexec_core.c.
>>>> - Remove memblock_cap_memory_ranges() i added in v1 and implement that
>>>> in fdt_enforce_memory_region().
>>>> There are at most two crash kernel regions, for two crash kernel regions
>>>> case, we cap the memory range [min(regs[*].start), max(regs[*].end)]
>>>> and then remove the memory range in the middle.
>>>>
>>>> [1]: https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.infradead.org_pipermail_kexec_2019-2DAugust_023569.html&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=9tn9kUBabiuYhVtXauANSDGaISnCnHLYcAUQgsPBFxs&e=
>>>> [v1]: https://urldefense.proofpoint.com/v2/url?u=https-3A__lkml.org_lkml_2019_4_2_1174&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=F-lM7II2cuMF_sK3b6-QhSbWM3X-pI_WZEs0sZitS7A&e=
>>>> [v2]: https://urldefense.proofpoint.com/v2/url?u=https-3A__lkml.org_lkml_2019_4_9_86&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=5Y-S6sqMTklHkOQsNtjTX3C7pV05BjKLGhJVfMHEvDs&e=
>>>> [v3]: https://urldefense.proofpoint.com/v2/url?u=https-3A__lkml.org_lkml_2019_4_9_306&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=cWn4zSRQupaZ3jjz4eDvD-pNkoLyL_hsZoRx4yJoD0c&e=
>>>> [v4]: https://urldefense.proofpoint.com/v2/url?u=https-3A__lkml.org_lkml_2019_4_15_273&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=Nslk4RJKIyIuT0IoQoolXNjupEDXplPhQQwnTSoXNWE&e=
>>>> [v5]: https://urldefense.proofpoint.com/v2/url?u=https-3A__lkml.org_lkml_2019_5_6_1360&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=HJVAM6sCxV2DnNg5d4pw8WPqtkmQnKvztEmkSIgtQ5M&e=
>>>>
>>>> Chen Zhou (4):
>>>> x86: kdump: move reserve_crashkernel_low() into crash_core.c
>>>> arm64: kdump: reserve crashkenel above 4G for crash dump kernel
>>>> arm64: kdump: add memory for devices by DT property, low-memory-range
>>>> kdump: update Documentation about crashkernel on arm64
>>>>
>>>> Documentation/admin-guide/kdump/kdump.rst | 13 ++++-
>>>> Documentation/admin-guide/kernel-parameters.txt | 12 ++++-
>>>> arch/arm64/include/asm/kexec.h | 3 ++
>>>> arch/arm64/kernel/setup.c | 8 ++-
>>>> arch/arm64/mm/init.c | 61 +++++++++++++++++++++--
>>>> arch/x86/include/asm/kexec.h | 3 ++
>>>> arch/x86/kernel/setup.c | 65 +++----------------------
>>>> include/linux/crash_core.h | 4 ++
>>>> include/linux/kexec.h | 1 -
>>>> kernel/crash_core.c | 65 +++++++++++++++++++++++++
>>>> 10 files changed, 168 insertions(+), 67 deletions(-)
>>>>
>>>
>>>
>>> _______________________________________________
>>> kexec mailing list
>>> [email protected]
>>> https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.infradead.org_mailman_listinfo_kexec&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=XMcFx61B_QPg-FUfG_-t88DKCnGm4grqu6zRguiHYrU&e=
>>
>>
>> .

2019-12-20 01:47:11

by chenzhou

[permalink] [raw]
Subject: Re: `

Hi John,

On 2019/12/20 2:33, John Donnelly wrote:
>
>
>> On Dec 18, 2019, at 8:56 PM, Chen Zhou <[email protected]> wrote:
>>
>> Hi John,
>>
>> On 2019/12/19 1:18, John Donnelly wrote:
>>> HI
>>>
>>> SEE INLINE ON A QUESTION :
>>>
>>>> On Dec 17, 2019, at 8:07 PM, Chen Zhou <[email protected]> wrote:
>>>>
>>>> Hi all,
>>>>
>>>> Friendly ping...
>>>>
>>>> On 2019/8/30 15:11, Chen Zhou wrote:
>>>>> I am busy with other things, so it was a long time before this version was
>>>>> released.
>>>>>
>>>>> This patch series enable reserving crashkernel above 4G in arm64.
>>>>>
>>>>> There are following issues in arm64 kdump:
>>>>> 1. We use crashkernel=X to reserve crashkernel below 4G, which will fail
>>>>> when there is no enough low memory.
>>>>> 2. Currently, crashkernel=Y@X can be used to reserve crashkernel above 4G,
>>>>> in this case, if swiotlb or DMA buffers are requierd, crash dump kernel
>>>>> will boot failure because there is no low memory available for allocation.
>>>
>>>
>>> Can you elaborate when the boot failures may fail due to lacking swiotlb or DMA buffers ? Are these related to certain adapters or specific platforms ?
>>>
>>> I have not seen this when using crashkernel=2024M@35GB .
>>>
>>
>> For example, in my environment "Huawei TaiShan 2280",
>> we need to use mpt3sas driver in crash dump kernel for dumping vmcore.
>>
>> mpt3sas driver needs to call dma_pool_alloc to allocate some pages,
>> if there is no DMA buffer, page allocation will fail, which leads to crash dump kernel boot failure,
>> like this:
>>
>> [2019/12/19 9:12:41] [ 12.403501] mpt3sas_cm0: diag reset: SUCCESS
>> [2019/12/19 9:12:41] [ 12.456076] mpt3sas_cm0: reply_post_free pool: dma_pool_alloc failed
>> [2019/12/19 9:12:41] [ 12.462515] pci 0004:48:00.0: can't derive routing for PCI INT A
>> [2019/12/19 9:12:41] [ 12.468761] mpt3sas 0004:49:00.0: PCI INT A: no GSI
>> [2019/12/19 9:12:41] [ 12.476348] mpt3sas_cm0: failure at drivers/scsi/mpt3sas/mpt3sas_scsih.c:10626/_scsih_probe()!
>> [2019/12/19 9:14:38] [ TIME ] Timed out waiting for device dev-di…b3\x2d890a\x2d2ead7df26f48.device.
>> [2019/12/19 9:14:38] [DEPEND] Dependency failed for Initrd Root Device.
>> [2019/12/19 9:14:38] [DEPEND] Dependency failed for /sysroot.
>> [2019/12/19 9:14:38] [DEPEND] Dependency failed for Initrd Root File System.
>> [2019/12/19 9:14:38] [DEPEND] Dependency failed for Reload Configuration from the Real Root.
>> [2019/12/19 9:14:38] [DEPEND] Dependency failed for File System C…40bae-9eb8-46b3-890a-2ead7df26f48.
>
>
> Thank you for sharing . We are not seeing this issue on a 5.4.0.rc8 ; Like I said in a previous email we can take crash dumps using crashkernel=768M for a “ standard “ small VMcore to local storage :
>
> 0004:01:00.0 RAID bus controller: Broadcom / LSI MegaRAID SAS-3 3316 [Intruder] (rev 01)
> Subsystem: Broadcom / LSI MegaRAID SAS 9361-16i
> Kernel driver in use: megaraid_sas
>
>
> What version of the kernel are you using ?

5.5.0.rc1

As I said in the patch series cover-letter, this patch series address following cases/isssues.

There are following issues in arm64 kdump:
1. We use crashkernel=X to reserve crashkernel below 4G, which will fail
when there is no enough low memory.
2. Currently, crashkernel=Y@X can be used to reserve crashkernel above 4G,
in this case, if swiotlb or DMA buffers are required, crash dump kernel
will boot failure because there is no low memory available for allocation.

From your description, you use crashkernel=768M.
There are enough crashkernel below 4G, so crashkernel will be
reserved successfully and kdump be ok. (This case has no DMA buffers issue.)

or you use crashkernel=2024M@35GB, and this case is ok?
If your driver doesn't need DMA buffers(I am not sure about it), kdump will also be ok.


If i understand your question and explain clearly?

Thanks,
Chen Zhou

>
>
>>
>> Thanks,
>> Chen Zhou
>>
>>>
>>>>>
>>>>> To solve these issues, introduce crashkernel=X,low to reserve specified
>>>>> size low memory.
>>>>> Crashkernel=X tries to reserve memory for the crash dump kernel under
>>>>> 4G. If crashkernel=Y,low is specified simultaneously, reserve spcified
>>>>> size low memory for crash kdump kernel devices firstly and then reserve
>>>>> memory above 4G.
>>>>>
>>>>> When crashkernel is reserved above 4G in memory, that is, crashkernel=X,low
>>>>> is specified simultaneously, kernel should reserve specified size low memory
>>>>> for crash dump kernel devices. So there may be two crash kernel regions, one
>>>>> is below 4G, the other is above 4G.
>>>>> In order to distinct from the high region and make no effect to the use of
>>>>> kexec-tools, rename the low region as "Crash kernel (low)", and add DT property
>>>>> "linux,low-memory-range" to crash dump kernel's dtb to pass the low region.
>>>>>
>>>>> Besides, we need to modify kexec-tools:
>>>>> arm64: kdump: add another DT property to crash dump kernel's dtb(see [1])
>>>>>
>>>>> The previous changes and discussions can be retrieved from:
>>>>>
>>>>> Changes since [v5]
>>>>> - Move reserve_crashkernel_low() into kernel/crash_core.c.
>>>>> - Delete crashkernel=X,high.
>>>>> - Modify crashkernel=X,low.
>>>>> If crashkernel=X,low is specified simultaneously, reserve spcified size low
>>>>> memory for crash kdump kernel devices firstly and then reserve memory above 4G.
>>>>> In addition, rename crashk_low_res as "Crash kernel (low)" for arm64, and then
>>>>> pass to crash dump kernel by DT property "linux,low-memory-range".
>>>>> - Update Documentation/admin-guide/kdump/kdump.rst.
>>>>>
>>>>> Changes since [v4]
>>>>> - Reimplement memblock_cap_memory_ranges for multiple ranges by Mike.
>>>>>
>>>>> Changes since [v3]
>>>>> - Add memblock_cap_memory_ranges back for multiple ranges.
>>>>> - Fix some compiling warnings.
>>>>>
>>>>> Changes since [v2]
>>>>> - Split patch "arm64: kdump: support reserving crashkernel above 4G" as
>>>>> two. Put "move reserve_crashkernel_low() into kexec_core.c" in a separate
>>>>> patch.
>>>>>
>>>>> Changes since [v1]:
>>>>> - Move common reserve_crashkernel_low() code into kernel/kexec_core.c.
>>>>> - Remove memblock_cap_memory_ranges() i added in v1 and implement that
>>>>> in fdt_enforce_memory_region().
>>>>> There are at most two crash kernel regions, for two crash kernel regions
>>>>> case, we cap the memory range [min(regs[*].start), max(regs[*].end)]
>>>>> and then remove the memory range in the middle.
>>>>>
>>>>> [1]: https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.infradead.org_pipermail_kexec_2019-2DAugust_023569.html&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=9tn9kUBabiuYhVtXauANSDGaISnCnHLYcAUQgsPBFxs&e=
>>>>> [v1]: https://urldefense.proofpoint.com/v2/url?u=https-3A__lkml.org_lkml_2019_4_2_1174&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=F-lM7II2cuMF_sK3b6-QhSbWM3X-pI_WZEs0sZitS7A&e=
>>>>> [v2]: https://urldefense.proofpoint.com/v2/url?u=https-3A__lkml.org_lkml_2019_4_9_86&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=5Y-S6sqMTklHkOQsNtjTX3C7pV05BjKLGhJVfMHEvDs&e=
>>>>> [v3]: https://urldefense.proofpoint.com/v2/url?u=https-3A__lkml.org_lkml_2019_4_9_306&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=cWn4zSRQupaZ3jjz4eDvD-pNkoLyL_hsZoRx4yJoD0c&e=
>>>>> [v4]: https://urldefense.proofpoint.com/v2/url?u=https-3A__lkml.org_lkml_2019_4_15_273&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=Nslk4RJKIyIuT0IoQoolXNjupEDXplPhQQwnTSoXNWE&e=
>>>>> [v5]: https://urldefense.proofpoint.com/v2/url?u=https-3A__lkml.org_lkml_2019_5_6_1360&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=HJVAM6sCxV2DnNg5d4pw8WPqtkmQnKvztEmkSIgtQ5M&e=
>>>>>
>>>>> Chen Zhou (4):
>>>>> x86: kdump: move reserve_crashkernel_low() into crash_core.c
>>>>> arm64: kdump: reserve crashkenel above 4G for crash dump kernel
>>>>> arm64: kdump: add memory for devices by DT property, low-memory-range
>>>>> kdump: update Documentation about crashkernel on arm64
>>>>>
>>>>> Documentation/admin-guide/kdump/kdump.rst | 13 ++++-
>>>>> Documentation/admin-guide/kernel-parameters.txt | 12 ++++-
>>>>> arch/arm64/include/asm/kexec.h | 3 ++
>>>>> arch/arm64/kernel/setup.c | 8 ++-
>>>>> arch/arm64/mm/init.c | 61 +++++++++++++++++++++--
>>>>> arch/x86/include/asm/kexec.h | 3 ++
>>>>> arch/x86/kernel/setup.c | 65 +++----------------------
>>>>> include/linux/crash_core.h | 4 ++
>>>>> include/linux/kexec.h | 1 -
>>>>> kernel/crash_core.c | 65 +++++++++++++++++++++++++
>>>>> 10 files changed, 168 insertions(+), 67 deletions(-)
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> kexec mailing list
>>>> [email protected]
>>>> https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.infradead.org_mailman_listinfo_kexec&d=DwICAg&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=t2fPg9D87F7D8jm0_3CG9yoiIKdRg4qc_thBw4bzMhc&m=ZAC6UYbT-3qLR3Dvevd09m6neWWzGWSphuvXXlXow68&s=XMcFx61B_QPg-FUfG_-t88DKCnGm4grqu6zRguiHYrU&e=
>>>
>>>
>>> .
>
>
> .
>