kernel/kexec_core.c | 77 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 58 insertions(+), 19 deletions(-)
Currently x86 and arm64 support to reserve low memory range for crashkernel. When crashkernel=Y,low is defined, the main kernel would reserve another memblock (instead of crashkernel=X,high, which stored in crashk_res) for crashkernel and store it in crashk_low_res. The implementations of get_crash_size and crash_shrink_size do not consider the extra reserved memory range if it exists. Thus, firstly accumulate this range on the size of crashkernel and export the size by /sys/kernel/kexec_crash_size. If getting the input of /sys/kernel/kexec_crash_size, both reserved ranges might be released if the new size is smaller than current size. The order of release is (crashk_res -> crashk_low_res). Only if the new size defined by the user is smaller than the size of low memory range, continue to release the reserved low memory range after completely releasing the high memory range. Kaihao Bai (2): kexec: accumulate kexec_crash_size if crashk_low_res defined kexec: release reserved memory ranges to RAM if crashk_low_res defined kernel/kexec_core.c | 77 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 58 insertions(+), 19 deletions(-) -- 1.8.3.1
On 07/04/22 at 07:41pm, Kaihao Bai wrote: > Currently x86 and arm64 support to reserve low memory range for > crashkernel. When crashkernel=Y,low is defined, the main kernel would > reserve another memblock (instead of crashkernel=X,high, which stored > in crashk_res) for crashkernel and store it in crashk_low_res. > > The implementations of get_crash_size and crash_shrink_size do not > consider the extra reserved memory range if it exists. Thus, firstly > accumulate this range on the size of crashkernel and export the size > by /sys/kernel/kexec_crash_size. > > If getting the input of /sys/kernel/kexec_crash_size, both reserved ranges > might be released if the new size is smaller than current size. The order > of release is (crashk_res -> crashk_low_res). Only if the new size defined > by the user is smaller than the size of low memory range, continue to > release the reserved low memory range after completely releasing the high > memory range. Sorry, I don't like this patchset. I bet you don't encounter a real problem in your product environment. Regarding crashkernel=,high|low, the ,low memory is for DMA and requirement from memory under lower range. The ,high meomry is for kernel/initrd loading, kernel data, user space program running. When you configure crashkernel= in your system, you need evaluate what value is suitable. /sys/kernel/kexec_crash_size is an interface you can make use of to tune the memory usage. People are not suggested to free all crashkernel reservation via the interface. So, please leave this as is, unless you have a real case where this change is needed. Thanks Baoquan
On 2022/7/5 9:56, Baoquan He wrote: > On 07/04/22 at 07:41pm, Kaihao Bai wrote: >> Currently x86 and arm64 support to reserve low memory range for >> crashkernel. When crashkernel=Y,low is defined, the main kernel would >> reserve another memblock (instead of crashkernel=X,high, which stored >> in crashk_res) for crashkernel and store it in crashk_low_res. >> >> The implementations of get_crash_size and crash_shrink_size do not >> consider the extra reserved memory range if it exists. Thus, firstly >> accumulate this range on the size of crashkernel and export the size >> by /sys/kernel/kexec_crash_size. >> >> If getting the input of /sys/kernel/kexec_crash_size, both reserved ranges >> might be released if the new size is smaller than current size. The order >> of release is (crashk_res -> crashk_low_res). Only if the new size defined >> by the user is smaller than the size of low memory range, continue to >> release the reserved low memory range after completely releasing the high >> memory range. > > Sorry, I don't like this patchset. > > I bet you don't encounter a real problem in your product environment. > Regarding crashkernel=,high|low, the ,low memory is for DMA and > requirement from memory under lower range. The ,high meomry is for > kernel/initrd loading, kernel data, user space program running. When > you configure crashkernel= in your system, you need evaluate what > value is suitable. /sys/kernel/kexec_crash_size is an interface you > can make use of to tune the memory usage. People are not suggested to > free all crashkernel reservation via the interface. > > So, please leave this as is, unless you have a real case where this > change is needed. > > Thanks > Baoquan Sorry for the late reply. Sincerely thanks for your reviewing, I don't have a real problem which needs to release part/all of the reserved low memory range of crashkernel. All I think is to change the interface more compatible with the reserved low memory range. Besides, I think it's still confusing if we have actually reserved low memory range of crashkernel, but it does not reflect by the size of kexec_crash_size. Thanks, Kaihao Bai
© 2016 - 2026 Red Hat, Inc.