kdump-lib.sh: add extra 64M to default crashkernel if sme/sev is active
Resolves: https://issues.redhat.com/browse/RHEL-8727
Resolves: https://issues.redhat.com/browse/RHEL-8710
Upstream: Fedora
Conflict: The 1st hunk is merged manualy because of conflict caused
          by context.
commit 4841bc6a6d
Author: Baoquan He <bhe@redhat.com>
Date:   Thu Sep 21 18:01:02 2023 +0800
    kdump-lib.sh: add extra 64M to default crashkernel if sme/sev is active
    It's reported that kdump kernel failed to boot and can't dump vmcore
    when crashkernel=192M and SME/SEV is active.
    This is because swiotlb will be enabled and reserves 64M memory by
    default on system with SME/SEV enabled. Then kdump kernel will be out of
    memory after taking 64M away for swiotlb init.
    So here add extra 64M memory to default crashkernel value so that kdump
    kernel can function well as before. When doing that, search journalctl
    for the "Memory Encryption Features active: AMD" to check if SME or SEV
    is active. This line of log is printed out in kernel function as below
    and the type SME is mutual exclusive with type SEV.
      ***:
      arch/x86/mm/mem_encrypt.c:print_mem_encrypt_feature_info()
    Note:
    1) The conditional check is relying on journalctl log because I didn't
       find available system interface to check if SEV is active. Even
       though we can check if SME is active via /proc/cpuinfo. For
       consistency, I take the same check for both SME and SEV by searching
       journalctl.
    2) The conditional check is relying on journalctl log, means it won't
       work for crashkernel setting in anoconda because the installation
       kernel doesn't have the SME/SEV setting. So customer need manually
       run 'kdumpctl reset-crashkernel' to reset crashkernel to add the
       extra 64M after OS installation.
    3) We need watch the line of log printing in
       print_mem_encrypt_feature_info() in kernel just in case people may
       change it in the future.
    Signed-off-by: Baoquan He <bhe@redhat.com>
    Reviewed-by: Philipp Rudo <prudo@redhat.com>
Signed-off-by: Baoquan He <bhe@redhat.com>
			
			
This commit is contained in:
		
							parent
							
								
									01ea017106
								
							
						
					
					
						commit
						1d7a651e6d
					
				
							
								
								
									
										11
									
								
								kdump-lib.sh
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								kdump-lib.sh
									
									
									
									
									
								
							| @ -30,6 +30,11 @@ is_fadump_capable() | |||||||
| 	return 1 | 	return 1 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | is_sme_or_sev_active() | ||||||
|  | { | ||||||
|  | 	journalctl -q --dmesg --grep "^Memory Encryption Features active: AMD (SME|SEV)$" >/dev/null 2>&1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| is_squash_available() | is_squash_available() | ||||||
| { | { | ||||||
| 	local _version kmodule | 	local _version kmodule | ||||||
| @ -1132,6 +1137,7 @@ _crashkernel_add() | |||||||
| kdump_get_arch_recommend_crashkernel() | kdump_get_arch_recommend_crashkernel() | ||||||
| { | { | ||||||
| 	local _arch _ck_cmdline _dump_mode | 	local _arch _ck_cmdline _dump_mode | ||||||
|  | 	local _delta=0 | ||||||
| 
 | 
 | ||||||
| 	if [[ -z "$1" ]]; then | 	if [[ -z "$1" ]]; then | ||||||
| 		if is_fadump_capable; then | 		if is_fadump_capable; then | ||||||
| @ -1147,9 +1153,9 @@ kdump_get_arch_recommend_crashkernel() | |||||||
| 
 | 
 | ||||||
| 	if [[ $_arch == "x86_64" ]] || [[ $_arch == "s390x" ]]; then | 	if [[ $_arch == "x86_64" ]] || [[ $_arch == "s390x" ]]; then | ||||||
| 		_ck_cmdline="1G-4G:192M,4G-64G:256M,64G-:512M" | 		_ck_cmdline="1G-4G:192M,4G-64G:256M,64G-:512M" | ||||||
|  | 		is_sme_or_sev_active && ((_delta += 64)) | ||||||
| 	elif [[ $_arch == "aarch64" ]]; then | 	elif [[ $_arch == "aarch64" ]]; then | ||||||
| 		local _running_kernel | 		local _running_kernel | ||||||
| 		local _delta=0 |  | ||||||
| 
 | 
 | ||||||
| 		# Base line for 4K variant kernel. The formula is based on x86 plus extra = 64M | 		# Base line for 4K variant kernel. The formula is based on x86 plus extra = 64M | ||||||
| 		_ck_cmdline="1G-4G:256M,4G-64G:320M,64G-:576M" | 		_ck_cmdline="1G-4G:256M,4G-64G:320M,64G-:576M" | ||||||
| @ -1173,7 +1179,6 @@ kdump_get_arch_recommend_crashkernel() | |||||||
| 			#4k kernel, mlx5 consumes extra 124M memory, and choose 150M | 			#4k kernel, mlx5 consumes extra 124M memory, and choose 150M | ||||||
| 			has_mlx5 && ((_delta += 150)) | 			has_mlx5 && ((_delta += 150)) | ||||||
| 		fi | 		fi | ||||||
| 		_ck_cmdline=$(_crashkernel_add "$_ck_cmdline" "${_delta}M") |  | ||||||
| 	elif [[ $_arch == "ppc64le" ]]; then | 	elif [[ $_arch == "ppc64le" ]]; then | ||||||
| 		if [[ $_dump_mode == "fadump" ]]; then | 		if [[ $_dump_mode == "fadump" ]]; then | ||||||
| 			_ck_cmdline="4G-16G:768M,16G-64G:1G,64G-128G:2G,128G-1T:4G,1T-2T:6G,2T-4T:12G,4T-8T:20G,8T-16T:36G,16T-32T:64G,32T-64T:128G,64T-:180G" | 			_ck_cmdline="4G-16G:768M,16G-64G:1G,64G-128G:2G,128G-1T:4G,1T-2T:6G,2T-4T:12G,4T-8T:20G,8T-16T:36G,16T-32T:64G,32T-64T:128G,64T-:180G" | ||||||
| @ -1182,7 +1187,7 @@ kdump_get_arch_recommend_crashkernel() | |||||||
| 		fi | 		fi | ||||||
| 	fi | 	fi | ||||||
| 
 | 
 | ||||||
| 	echo -n "$_ck_cmdline" | 	echo -n "$(_crashkernel_add "$_ck_cmdline" "${_delta}M")" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # return recommended size based on current system RAM size | # return recommended size based on current system RAM size | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user