Commit | Line | Data |
---|---|---|
dce623e0 ME |
1 | /* |
2 | * Copyright 2006 Michael Ellerman, IBM Corporation | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or | |
5 | * modify it under the terms of the GNU General Public License | |
6 | * as published by the Free Software Foundation; either version | |
7 | * 2 of the License, or (at your option) any later version. | |
8 | */ | |
9 | ||
0b05ac6e BH |
10 | #include <linux/kernel.h> |
11 | #include <linux/interrupt.h> | |
12 | ||
dce623e0 ME |
13 | #include <asm/machdep.h> |
14 | #include <asm/page.h> | |
15 | #include <asm/firmware.h> | |
16 | #include <asm/kexec.h> | |
0b05ac6e | 17 | #include <asm/xics.h> |
f6407120 | 18 | #include <asm/smp.h> |
212bebb4 | 19 | #include <asm/plpar_wrappers.h> |
dce623e0 ME |
20 | |
21 | #include "pseries.h" | |
dce623e0 | 22 | |
d739d2ca | 23 | void pseries_kexec_cpu_down(int crash_shutdown, int secondary) |
dce623e0 ME |
24 | { |
25 | /* Don't risk a hypervisor call if we're crashing */ | |
26 | if (firmware_has_feature(FW_FEATURE_SPLPAR) && !crash_shutdown) { | |
b1301797 | 27 | int ret; |
598c8231 AB |
28 | int cpu = smp_processor_id(); |
29 | int hwcpu = hard_smp_processor_id(); | |
b1301797 AB |
30 | |
31 | if (get_lppaca()->dtl_enable_mask) { | |
598c8231 | 32 | ret = unregister_dtl(hwcpu); |
b1301797 AB |
33 | if (ret) { |
34 | pr_err("WARNING: DTL deregistration for cpu " | |
35 | "%d (hw %d) failed with %d\n", | |
598c8231 | 36 | cpu, hwcpu, ret); |
b1301797 AB |
37 | } |
38 | } | |
dce623e0 | 39 | |
598c8231 | 40 | ret = unregister_slb_shadow(hwcpu); |
711ef84e AB |
41 | if (ret) { |
42 | pr_err("WARNING: SLB shadow buffer deregistration " | |
43 | "for cpu %d (hw %d) failed with %d\n", | |
598c8231 | 44 | cpu, hwcpu, ret); |
711ef84e | 45 | } |
dce623e0 | 46 | |
598c8231 | 47 | ret = unregister_vpa(hwcpu); |
711ef84e AB |
48 | if (ret) { |
49 | pr_err("WARNING: VPA deregistration for cpu %d " | |
598c8231 | 50 | "(hw %d) failed with %d\n", cpu, hwcpu, ret); |
dce623e0 ME |
51 | } |
52 | } | |
dce623e0 | 53 | |
c3e8506c | 54 | xics_kexec_teardown_cpu(secondary); |
dce623e0 | 55 | } |