summaryrefslogtreecommitdiff
path: root/arch/powerpc/platforms/pseries/kexec.c
diff options
context:
space:
mode:
authorAnton Blanchard <anton@samba.org>2011-07-25 01:46:32 (GMT)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2011-08-05 04:47:57 (GMT)
commitb1301797f30370c430244979671978fc232f4533 (patch)
treed3e03d2023b23f0d7d14c4e52d7c7b1e5613f2cc /arch/powerpc/platforms/pseries/kexec.c
parenta149507bdb78d69e0020dbb505f3c55b205b69b3 (diff)
downloadlinux-fsl-qoriq-b1301797f30370c430244979671978fc232f4533.tar.xz
powerpc/pseries: Fix kexec on recent firmware versions
Recent versions of firmware will fail to unmap the virtual processor area if we have a dispatch trace log registered. This causes kexec to fail. If a trace log is registered this patch unregisters it before the SLB shadow and virtual processor areas, fixing the problem. The address argument is ignored by firmware on unregister so we may as well remove it. Signed-off-by: Anton Blanchard <anton@samba.org> Cc: <stable@kernel.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/platforms/pseries/kexec.c')
-rw-r--r--arch/powerpc/platforms/pseries/kexec.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/pseries/kexec.c b/arch/powerpc/platforms/pseries/kexec.c
index 54cf3a4..1118cb7 100644
--- a/arch/powerpc/platforms/pseries/kexec.c
+++ b/arch/powerpc/platforms/pseries/kexec.c
@@ -26,6 +26,17 @@ static void pseries_kexec_cpu_down(int crash_shutdown, int secondary)
/* Don't risk a hypervisor call if we're crashing */
if (firmware_has_feature(FW_FEATURE_SPLPAR) && !crash_shutdown) {
unsigned long addr;
+ int ret;
+
+ if (get_lppaca()->dtl_enable_mask) {
+ ret = unregister_dtl(hard_smp_processor_id());
+ if (ret) {
+ pr_err("WARNING: DTL deregistration for cpu "
+ "%d (hw %d) failed with %d\n",
+ smp_processor_id(),
+ hard_smp_processor_id(), ret);
+ }
+ }
addr = __pa(get_slb_shadow());
if (unregister_slb_shadow(hard_smp_processor_id(), addr))