1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef _X86_CRASH_CORE_H |
3 | #define _X86_CRASH_CORE_H |
4 | |
5 | /* 16M alignment for crash kernel regions */ |
6 | #define CRASH_ALIGN SZ_16M |
7 | |
8 | /* |
9 | * Keep the crash kernel below this limit. |
10 | * |
11 | * Earlier 32-bits kernels would limit the kernel to the low 512 MB range |
12 | * due to mapping restrictions. |
13 | * |
14 | * 64-bit kdump kernels need to be restricted to be under 64 TB, which is |
15 | * the upper limit of system RAM in 4-level paging mode. Since the kdump |
16 | * jump could be from 5-level paging to 4-level paging, the jump will fail if |
17 | * the kernel is put above 64 TB, and during the 1st kernel bootup there's |
18 | * no good way to detect the paging mode of the target kernel which will be |
19 | * loaded for dumping. |
20 | */ |
21 | extern unsigned long swiotlb_size_or_default(void); |
22 | |
23 | #ifdef CONFIG_X86_32 |
24 | # define CRASH_ADDR_LOW_MAX SZ_512M |
25 | # define CRASH_ADDR_HIGH_MAX SZ_512M |
26 | #else |
27 | # define CRASH_ADDR_LOW_MAX SZ_4G |
28 | # define CRASH_ADDR_HIGH_MAX SZ_64T |
29 | #endif |
30 | |
31 | # define DEFAULT_CRASH_KERNEL_LOW_SIZE crash_low_size_default() |
32 | |
33 | static inline unsigned long crash_low_size_default(void) |
34 | { |
35 | #ifdef CONFIG_X86_64 |
36 | return max(swiotlb_size_or_default() + (8UL << 20), 256UL << 20); |
37 | #else |
38 | return 0; |
39 | #endif |
40 | } |
41 | |
42 | #endif /* _X86_CRASH_CORE_H */ |
43 | |