Unverified Commit 8d11a836 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!11147 powerpc/pseries: Fix scv instruction crash with kexec

parents a3e2493c 24c907e7
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include <asm/paca.h>
#include <asm/mmu.h>
#include <asm/sections.h>	/* _end */
#include <asm/setup.h>
#include <asm/prom.h>
#include <asm/smp.h>
#include <asm/hw_breakpoint.h>
@@ -313,6 +314,16 @@ void default_machine_kexec(struct kimage *image)
	if (!kdump_in_progress())
		kexec_prepare_cpus();

	#ifdef CONFIG_PPC_PSERIES
		/*
		 * This must be done after other CPUs have shut down, otherwise they
		 * could execute the 'scv' instruction, which is not supported with
		 * reloc disabled (see configure_exceptions()).
		 */
		if (firmware_has_feature(FW_FEATURE_SET_MODE))
			pseries_disable_reloc_on_exc();
	#endif

	printk("kexec: Starting switchover sequence.\n");

	/* switch to a staticly allocated stack.  Based on irq stack code.
+0 −11
Original line number Diff line number Diff line
@@ -409,16 +409,6 @@ void pseries_disable_reloc_on_exc(void)
}
EXPORT_SYMBOL(pseries_disable_reloc_on_exc);

#ifdef CONFIG_KEXEC_CORE
static void pSeries_machine_kexec(struct kimage *image)
{
	if (firmware_has_feature(FW_FEATURE_SET_MODE))
		pseries_disable_reloc_on_exc();

	default_machine_kexec(image);
}
#endif

#ifdef __LITTLE_ENDIAN__
void pseries_big_endian_exceptions(void)
{
@@ -1071,7 +1061,6 @@ define_machine(pseries) {
	.machine_check_early	= pseries_machine_check_realmode,
	.machine_check_exception = pSeries_machine_check_exception,
#ifdef CONFIG_KEXEC_CORE
	.machine_kexec          = pSeries_machine_kexec,
	.kexec_cpu_down         = pseries_kexec_cpu_down,
#endif
#ifdef CONFIG_MEMORY_HOTPLUG_SPARSE