diff --git a/kdumpctl b/kdumpctl
index f9219c8..20e326e 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -1572,6 +1572,36 @@ reset_crashkernel()
 	fi
 }
 
+# shellcheck disable=SC2154 # false positive when dereferencing an array
+reset_crashkernel_after_update()
+{
+	local _kernel _crashkernel _dump_mode _fadump_val _old_default_crashkernel _new_default_crashkernel
+	declare -A _crashkernel_vals
+
+	_crashkernel_vals[old_kdump]=$(cat /tmp/old_default_crashkernel 2> /dev/null)
+	_crashkernel_vals[old_fadump]=$(cat /tmp/old_default_crashkernel_fadump 2> /dev/null)
+	_crashkernel_vals[new_kdump]=$(get_default_crashkernel kdump)
+	_crashkernel_vals[new_fadump]=$(get_default_crashkernel fadump)
+
+	for _kernel in $(_get_all_kernels_from_grubby); do
+		_crashkernel=$(get_grub_kernel_boot_parameter "$_kernel" crashkernel)
+		if [[ $_crashkernel == auto ]]; then
+			reset_crashkernel "--kernel=$_kernel"
+		elif [[ -n $_crashkernel ]]; then
+			_dump_mode=$(get_dump_mode_by_kernel "$_kernel")
+			_old_default_crashkernel=${_crashkernel_vals[old_${_dump_mode}]}
+			_new_default_crashkernel=${_crashkernel_vals[new_${_dump_mode}]}
+			if [[ $_crashkernel == "$_old_default_crashkernel" ]] &&
+				[[ $_new_default_crashkernel != "$_old_default_crashkernel" ]]; then
+				_fadump_val=$(get_grub_kernel_boot_parameter "$_kernel" fadump)
+				if _update_grub "$_kernel" "$_new_default_crashkernel" "$_dump_mode" "$_fadump_val"; then
+					echo "For kernel=$_kernel, crashkernel=$_new_default_crashkernel now."
+				fi
+			fi
+		fi
+	done
+}
+
 if [[ ! -f $KDUMP_CONFIG_FILE ]]; then
 	derror "Error: No kdump config file found!"
 	exit 1
@@ -1637,6 +1667,11 @@ main()
 		shift
 		reset_crashkernel "$@"
 		;;
+	reset-crashkernel-after-update)
+		if [[ $(kdump_get_conf_val auto_reset_crashkernel) != no ]]; then
+			reset_crashkernel_after_update
+		fi
+		;;
 	*)
 		dinfo $"Usage: $0 {estimate|start|stop|status|restart|reload|rebuild|reset-crashkernel|propagate|showmem}"
 		exit 1
diff --git a/kexec-tools.spec b/kexec-tools.spec
index 0cf39fc..5655503 100644
--- a/kexec-tools.spec
+++ b/kexec-tools.spec
@@ -259,6 +259,15 @@ chmod 755 $RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99zz-fadumpini
 mkdir -p $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/
 mv $RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/* $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/
 
+%pre
+# save the old default crashkernel values to /tmp/ when upgrading the package
+if ! grep -q "ostree" /proc/cmdline && [ $1 == 2 ] && grep -q get-default-crashkernel /usr/bin/kdumpctl; then
+  kdumpctl get-default-crashkernel kdump > /tmp/old_default_crashkernel 2>/dev/null
+%ifarch ppc64 ppc64le
+  kdumpctl get-default-crashkernel fadump > /tmp/old_default_crashkernel_fadump 2>/dev/null
+%endif
+fi
+
 %post
 # Initial installation
 %systemd_post kdump.service
@@ -292,6 +301,19 @@ then
 	mv /etc/sysconfig/kdump.new /etc/sysconfig/kdump
 fi
 
+# try to reset kernel crashkernel value to new default value when upgrading
+# the package
+if ! grep -q "ostree" /proc/cmdline && [ $1 == 2 ]; then
+  kdumpctl reset-crashkernel-after-update
+  rm /tmp/old_default_crashkernel 2>/dev/null
+%ifarch ppc64 ppc64le
+  rm /tmp/old_default_crashkernel_fadump 2>/dev/null
+%endif
+  # dnf would complain about the exit code not being 0. To keep it happy,
+  # always return 0
+  :
+fi
+
 
 %postun
 %systemd_postun_with_restart kdump.service