Reserve 60MB at maximum for SWIOTLB.
Signed-off-by: Coiby Xu <coxu(a)redhat.com>
---
kdumpctl | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/kdumpctl b/kdumpctl
index 345e112..5149cfe 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -1358,7 +1358,6 @@ _valid_grubby_kernel_path()
[[ -e $1 ]] || [[ $1 == ALL ]] || [[ $1 == DEFAULT ]]
}
-
get_dump_mode_of_kernel()
{
local _kernel_path=$1 _fadump_val
@@ -1378,6 +1377,7 @@ get_dump_mode_of_kernel()
_determine_kernel_path_and_crashkernel()
{
local _grub_kernel_path _crashkernel
+
if [[ -n "$1" ]] && [[ -n "$2" ]]; then
_grub_kernel_path=$(_find_grubby_kernel_path "$1") || return 1
if _valid_grubby_kernel_path "$1"; then
@@ -1400,9 +1400,31 @@ _determine_kernel_path_and_crashkernel()
echo -n "${_grub_kernel_path};${_crashkernel}"
}
+calculate_swiotlb_mem()
+{
+ local _default_mem=64 _grub_kernel_path="$1"
+ local _num_re="^[0-9]+$"
+ if [[ $(get_grub_kernel_boot_parameter "$_grub_kernel_path" mem_encrypt) == on
]]; then
+ # sanity check?
+ _swiotlb_str=$(get_grub_kernel_boot_parameter "$_grub_kernel_path" swiotlb)
+ if [[ $_swiotlb_str == noforce ]]; then
+ echo -n 0
+ elif [[ $_swiotlb_str =~ $_num_re ]]; then
+ _swiotlb_sab_mem=$(((_swiotlb_str*128+127)/128))
+ [[ $_swiotlb_sab_mem -gt 64 ]] && _swiotlb_sab_mem="$_default_mem"
+ echo -n "$_swiotlb_sab_mem"
+ else
+ echo -n "$_default_mem"
+ fi
+ else
+ echo -n 0
+ fi
+}
+
reset_crashkernel()
{
local _crashkernel _kernel_crashkernel _grub_kernel_path _tmp_str _dump_mode
+ local _extra_mem _swiotlb_mem
if _tmp_str=$(_determine_kernel_path_and_crashkernel "$1" "$2");
then
_grub_kernel_path=$(cut -d ";" -f 1 <<< "$_tmp_str")
@@ -1425,6 +1447,10 @@ reset_crashkernel()
if [[ $_crashkernel == "auto" ]] ; then
_kernel_crashkernel=$(kdump_get_arch_recommend_crashkernel "$_dump_mode")
+ _extra_mem=0
+ _swiotlb_mem=$(calculate_swiotlb_mem "$_grub_kernel_path")
+ _extra_mem=$((_extra_mem+_swiotlb_mem))
+ _kernel_crashkernel=$(add_extra_mem_to_crashkernel "$_extra_mem"
"$_kernel_crashkernel")
else
_kernel_crashkernel="$_crashkernel"
fi
--
2.31.1