diff options
Diffstat (limited to 'arch/powerpc/kernel/exceptions-64s.S')
-rw-r--r-- | arch/powerpc/kernel/exceptions-64s.S | 228 |
1 files changed, 143 insertions, 85 deletions
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index a85f4874cba7..41b02c792aa3 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S | |||
@@ -40,7 +40,6 @@ __start_interrupts: | |||
40 | .globl system_reset_pSeries; | 40 | .globl system_reset_pSeries; |
41 | system_reset_pSeries: | 41 | system_reset_pSeries: |
42 | HMT_MEDIUM; | 42 | HMT_MEDIUM; |
43 | DO_KVM 0x100; | ||
44 | SET_SCRATCH0(r13) | 43 | SET_SCRATCH0(r13) |
45 | #ifdef CONFIG_PPC_P7_NAP | 44 | #ifdef CONFIG_PPC_P7_NAP |
46 | BEGIN_FTR_SECTION | 45 | BEGIN_FTR_SECTION |
@@ -50,82 +49,73 @@ BEGIN_FTR_SECTION | |||
50 | * state loss at this time. | 49 | * state loss at this time. |
51 | */ | 50 | */ |
52 | mfspr r13,SPRN_SRR1 | 51 | mfspr r13,SPRN_SRR1 |
53 | rlwinm r13,r13,47-31,30,31 | 52 | rlwinm. r13,r13,47-31,30,31 |
54 | cmpwi cr0,r13,1 | 53 | beq 9f |
55 | bne 1f | 54 | |
56 | b .power7_wakeup_noloss | 55 | /* waking up from powersave (nap) state */ |
57 | 1: cmpwi cr0,r13,2 | 56 | cmpwi cr1,r13,2 |
58 | bne 1f | ||
59 | b .power7_wakeup_loss | ||
60 | /* Total loss of HV state is fatal, we could try to use the | 57 | /* Total loss of HV state is fatal, we could try to use the |
61 | * PIR to locate a PACA, then use an emergency stack etc... | 58 | * PIR to locate a PACA, then use an emergency stack etc... |
62 | * but for now, let's just stay stuck here | 59 | * but for now, let's just stay stuck here |
63 | */ | 60 | */ |
64 | 1: cmpwi cr0,r13,3 | 61 | bgt cr1,. |
65 | beq . | 62 | GET_PACA(r13) |
66 | END_FTR_SECTION_IFSET(CPU_FTR_HVMODE_206) | 63 | |
64 | #ifdef CONFIG_KVM_BOOK3S_64_HV | ||
65 | lbz r0,PACAPROCSTART(r13) | ||
66 | cmpwi r0,0x80 | ||
67 | bne 1f | ||
68 | li r0,0 | ||
69 | stb r0,PACAPROCSTART(r13) | ||
70 | b kvm_start_guest | ||
71 | 1: | ||
72 | #endif | ||
73 | |||
74 | beq cr1,2f | ||
75 | b .power7_wakeup_noloss | ||
76 | 2: b .power7_wakeup_loss | ||
77 | 9: | ||
78 | END_FTR_SECTION_IFSET(CPU_FTR_HVMODE | CPU_FTR_ARCH_206) | ||
67 | #endif /* CONFIG_PPC_P7_NAP */ | 79 | #endif /* CONFIG_PPC_P7_NAP */ |
68 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common, EXC_STD) | 80 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common, EXC_STD, |
81 | NOTEST, 0x100) | ||
69 | 82 | ||
70 | . = 0x200 | 83 | . = 0x200 |
71 | _machine_check_pSeries: | 84 | machine_check_pSeries_1: |
72 | HMT_MEDIUM | 85 | /* This is moved out of line as it can be patched by FW, but |
73 | DO_KVM 0x200 | 86 | * some code path might still want to branch into the original |
74 | SET_SCRATCH0(r13) | 87 | * vector |
75 | EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common, EXC_STD) | 88 | */ |
89 | b machine_check_pSeries | ||
76 | 90 | ||
77 | . = 0x300 | 91 | . = 0x300 |
78 | .globl data_access_pSeries | 92 | .globl data_access_pSeries |
79 | data_access_pSeries: | 93 | data_access_pSeries: |
80 | HMT_MEDIUM | 94 | HMT_MEDIUM |
81 | DO_KVM 0x300 | ||
82 | SET_SCRATCH0(r13) | 95 | SET_SCRATCH0(r13) |
96 | #ifndef CONFIG_POWER4_ONLY | ||
83 | BEGIN_FTR_SECTION | 97 | BEGIN_FTR_SECTION |
84 | GET_PACA(r13) | 98 | b data_access_check_stab |
85 | std r9,PACA_EXSLB+EX_R9(r13) | 99 | data_access_not_stab: |
86 | std r10,PACA_EXSLB+EX_R10(r13) | 100 | END_MMU_FTR_SECTION_IFCLR(MMU_FTR_SLB) |
87 | mfspr r10,SPRN_DAR | 101 | #endif |
88 | mfspr r9,SPRN_DSISR | 102 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, data_access_common, EXC_STD, |
89 | srdi r10,r10,60 | 103 | KVMTEST_PR, 0x300) |
90 | rlwimi r10,r9,16,0x20 | ||
91 | mfcr r9 | ||
92 | cmpwi r10,0x2c | ||
93 | beq do_stab_bolted_pSeries | ||
94 | ld r10,PACA_EXSLB+EX_R10(r13) | ||
95 | std r11,PACA_EXGEN+EX_R11(r13) | ||
96 | ld r11,PACA_EXSLB+EX_R9(r13) | ||
97 | std r12,PACA_EXGEN+EX_R12(r13) | ||
98 | GET_SCRATCH0(r12) | ||
99 | std r10,PACA_EXGEN+EX_R10(r13) | ||
100 | std r11,PACA_EXGEN+EX_R9(r13) | ||
101 | std r12,PACA_EXGEN+EX_R13(r13) | ||
102 | EXCEPTION_PROLOG_PSERIES_1(data_access_common, EXC_STD) | ||
103 | FTR_SECTION_ELSE | ||
104 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, data_access_common, EXC_STD) | ||
105 | ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_SLB) | ||
106 | 104 | ||
107 | . = 0x380 | 105 | . = 0x380 |
108 | .globl data_access_slb_pSeries | 106 | .globl data_access_slb_pSeries |
109 | data_access_slb_pSeries: | 107 | data_access_slb_pSeries: |
110 | HMT_MEDIUM | 108 | HMT_MEDIUM |
111 | DO_KVM 0x380 | ||
112 | SET_SCRATCH0(r13) | 109 | SET_SCRATCH0(r13) |
113 | GET_PACA(r13) | 110 | EXCEPTION_PROLOG_1(PACA_EXSLB, KVMTEST_PR, 0x380) |
114 | std r3,PACA_EXSLB+EX_R3(r13) | 111 | std r3,PACA_EXSLB+EX_R3(r13) |
115 | mfspr r3,SPRN_DAR | 112 | mfspr r3,SPRN_DAR |
116 | std r9,PACA_EXSLB+EX_R9(r13) /* save r9 - r12 */ | ||
117 | mfcr r9 | ||
118 | #ifdef __DISABLED__ | 113 | #ifdef __DISABLED__ |
119 | /* Keep that around for when we re-implement dynamic VSIDs */ | 114 | /* Keep that around for when we re-implement dynamic VSIDs */ |
120 | cmpdi r3,0 | 115 | cmpdi r3,0 |
121 | bge slb_miss_user_pseries | 116 | bge slb_miss_user_pseries |
122 | #endif /* __DISABLED__ */ | 117 | #endif /* __DISABLED__ */ |
123 | std r10,PACA_EXSLB+EX_R10(r13) | 118 | mfspr r12,SPRN_SRR1 |
124 | std r11,PACA_EXSLB+EX_R11(r13) | ||
125 | std r12,PACA_EXSLB+EX_R12(r13) | ||
126 | GET_SCRATCH0(r10) | ||
127 | std r10,PACA_EXSLB+EX_R13(r13) | ||
128 | mfspr r12,SPRN_SRR1 /* and SRR1 */ | ||
129 | #ifndef CONFIG_RELOCATABLE | 119 | #ifndef CONFIG_RELOCATABLE |
130 | b .slb_miss_realmode | 120 | b .slb_miss_realmode |
131 | #else | 121 | #else |
@@ -147,24 +137,16 @@ data_access_slb_pSeries: | |||
147 | .globl instruction_access_slb_pSeries | 137 | .globl instruction_access_slb_pSeries |
148 | instruction_access_slb_pSeries: | 138 | instruction_access_slb_pSeries: |
149 | HMT_MEDIUM | 139 | HMT_MEDIUM |
150 | DO_KVM 0x480 | ||
151 | SET_SCRATCH0(r13) | 140 | SET_SCRATCH0(r13) |
152 | GET_PACA(r13) | 141 | EXCEPTION_PROLOG_1(PACA_EXSLB, KVMTEST_PR, 0x480) |
153 | std r3,PACA_EXSLB+EX_R3(r13) | 142 | std r3,PACA_EXSLB+EX_R3(r13) |
154 | mfspr r3,SPRN_SRR0 /* SRR0 is faulting address */ | 143 | mfspr r3,SPRN_SRR0 /* SRR0 is faulting address */ |
155 | std r9,PACA_EXSLB+EX_R9(r13) /* save r9 - r12 */ | ||
156 | mfcr r9 | ||
157 | #ifdef __DISABLED__ | 144 | #ifdef __DISABLED__ |
158 | /* Keep that around for when we re-implement dynamic VSIDs */ | 145 | /* Keep that around for when we re-implement dynamic VSIDs */ |
159 | cmpdi r3,0 | 146 | cmpdi r3,0 |
160 | bge slb_miss_user_pseries | 147 | bge slb_miss_user_pseries |
161 | #endif /* __DISABLED__ */ | 148 | #endif /* __DISABLED__ */ |
162 | std r10,PACA_EXSLB+EX_R10(r13) | 149 | mfspr r12,SPRN_SRR1 |
163 | std r11,PACA_EXSLB+EX_R11(r13) | ||
164 | std r12,PACA_EXSLB+EX_R12(r13) | ||
165 | GET_SCRATCH0(r10) | ||
166 | std r10,PACA_EXSLB+EX_R13(r13) | ||
167 | mfspr r12,SPRN_SRR1 /* and SRR1 */ | ||
168 | #ifndef CONFIG_RELOCATABLE | 150 | #ifndef CONFIG_RELOCATABLE |
169 | b .slb_miss_realmode | 151 | b .slb_miss_realmode |
170 | #else | 152 | #else |
@@ -184,26 +166,46 @@ instruction_access_slb_pSeries: | |||
184 | hardware_interrupt_pSeries: | 166 | hardware_interrupt_pSeries: |
185 | hardware_interrupt_hv: | 167 | hardware_interrupt_hv: |
186 | BEGIN_FTR_SECTION | 168 | BEGIN_FTR_SECTION |
187 | _MASKABLE_EXCEPTION_PSERIES(0x500, hardware_interrupt, EXC_STD) | 169 | _MASKABLE_EXCEPTION_PSERIES(0x502, hardware_interrupt, |
170 | EXC_HV, SOFTEN_TEST_HV) | ||
171 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0x502) | ||
188 | FTR_SECTION_ELSE | 172 | FTR_SECTION_ELSE |
189 | _MASKABLE_EXCEPTION_PSERIES(0x502, hardware_interrupt, EXC_HV) | 173 | _MASKABLE_EXCEPTION_PSERIES(0x500, hardware_interrupt, |
190 | ALT_FTR_SECTION_END_IFCLR(CPU_FTR_HVMODE_206) | 174 | EXC_STD, SOFTEN_TEST_HV_201) |
175 | KVM_HANDLER(PACA_EXGEN, EXC_STD, 0x500) | ||
176 | ALT_FTR_SECTION_END_IFSET(CPU_FTR_HVMODE | CPU_FTR_ARCH_206) | ||
191 | 177 | ||
192 | STD_EXCEPTION_PSERIES(0x600, 0x600, alignment) | 178 | STD_EXCEPTION_PSERIES(0x600, 0x600, alignment) |
179 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0x600) | ||
180 | |||
193 | STD_EXCEPTION_PSERIES(0x700, 0x700, program_check) | 181 | STD_EXCEPTION_PSERIES(0x700, 0x700, program_check) |
182 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0x700) | ||
183 | |||
194 | STD_EXCEPTION_PSERIES(0x800, 0x800, fp_unavailable) | 184 | STD_EXCEPTION_PSERIES(0x800, 0x800, fp_unavailable) |
185 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0x800) | ||
195 | 186 | ||
196 | MASKABLE_EXCEPTION_PSERIES(0x900, 0x900, decrementer) | 187 | MASKABLE_EXCEPTION_PSERIES(0x900, 0x900, decrementer) |
197 | MASKABLE_EXCEPTION_HV(0x980, 0x980, decrementer) | 188 | MASKABLE_EXCEPTION_HV(0x980, 0x982, decrementer) |
198 | 189 | ||
199 | STD_EXCEPTION_PSERIES(0xa00, 0xa00, trap_0a) | 190 | STD_EXCEPTION_PSERIES(0xa00, 0xa00, trap_0a) |
191 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0xa00) | ||
192 | |||
200 | STD_EXCEPTION_PSERIES(0xb00, 0xb00, trap_0b) | 193 | STD_EXCEPTION_PSERIES(0xb00, 0xb00, trap_0b) |
194 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0xb00) | ||
201 | 195 | ||
202 | . = 0xc00 | 196 | . = 0xc00 |
203 | .globl system_call_pSeries | 197 | .globl system_call_pSeries |
204 | system_call_pSeries: | 198 | system_call_pSeries: |
205 | HMT_MEDIUM | 199 | HMT_MEDIUM |
206 | DO_KVM 0xc00 | 200 | #ifdef CONFIG_KVM_BOOK3S_64_HANDLER |
201 | SET_SCRATCH0(r13) | ||
202 | GET_PACA(r13) | ||
203 | std r9,PACA_EXGEN+EX_R9(r13) | ||
204 | std r10,PACA_EXGEN+EX_R10(r13) | ||
205 | mfcr r9 | ||
206 | KVMTEST(0xc00) | ||
207 | GET_SCRATCH0(r13) | ||
208 | #endif | ||
207 | BEGIN_FTR_SECTION | 209 | BEGIN_FTR_SECTION |
208 | cmpdi r0,0x1ebe | 210 | cmpdi r0,0x1ebe |
209 | beq- 1f | 211 | beq- 1f |
@@ -220,6 +222,8 @@ END_FTR_SECTION_IFSET(CPU_FTR_REAL_LE) | |||
220 | rfid | 222 | rfid |
221 | b . /* prevent speculative execution */ | 223 | b . /* prevent speculative execution */ |
222 | 224 | ||
225 | KVM_HANDLER(PACA_EXGEN, EXC_STD, 0xc00) | ||
226 | |||
223 | /* Fast LE/BE switch system call */ | 227 | /* Fast LE/BE switch system call */ |
224 | 1: mfspr r12,SPRN_SRR1 | 228 | 1: mfspr r12,SPRN_SRR1 |
225 | xori r12,r12,MSR_LE | 229 | xori r12,r12,MSR_LE |
@@ -228,6 +232,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_REAL_LE) | |||
228 | b . | 232 | b . |
229 | 233 | ||
230 | STD_EXCEPTION_PSERIES(0xd00, 0xd00, single_step) | 234 | STD_EXCEPTION_PSERIES(0xd00, 0xd00, single_step) |
235 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0xd00) | ||
231 | 236 | ||
232 | /* At 0xe??? we have a bunch of hypervisor exceptions, we branch | 237 | /* At 0xe??? we have a bunch of hypervisor exceptions, we branch |
233 | * out of line to handle them | 238 | * out of line to handle them |
@@ -262,30 +267,93 @@ vsx_unavailable_pSeries_1: | |||
262 | 267 | ||
263 | #ifdef CONFIG_CBE_RAS | 268 | #ifdef CONFIG_CBE_RAS |
264 | STD_EXCEPTION_HV(0x1200, 0x1202, cbe_system_error) | 269 | STD_EXCEPTION_HV(0x1200, 0x1202, cbe_system_error) |
270 | KVM_HANDLER_PR_SKIP(PACA_EXGEN, EXC_HV, 0x1202) | ||
265 | #endif /* CONFIG_CBE_RAS */ | 271 | #endif /* CONFIG_CBE_RAS */ |
272 | |||
266 | STD_EXCEPTION_PSERIES(0x1300, 0x1300, instruction_breakpoint) | 273 | STD_EXCEPTION_PSERIES(0x1300, 0x1300, instruction_breakpoint) |
274 | KVM_HANDLER_PR_SKIP(PACA_EXGEN, EXC_STD, 0x1300) | ||
275 | |||
267 | #ifdef CONFIG_CBE_RAS | 276 | #ifdef CONFIG_CBE_RAS |
268 | STD_EXCEPTION_HV(0x1600, 0x1602, cbe_maintenance) | 277 | STD_EXCEPTION_HV(0x1600, 0x1602, cbe_maintenance) |
278 | KVM_HANDLER_PR_SKIP(PACA_EXGEN, EXC_HV, 0x1602) | ||
269 | #endif /* CONFIG_CBE_RAS */ | 279 | #endif /* CONFIG_CBE_RAS */ |
280 | |||
270 | STD_EXCEPTION_PSERIES(0x1700, 0x1700, altivec_assist) | 281 | STD_EXCEPTION_PSERIES(0x1700, 0x1700, altivec_assist) |
282 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0x1700) | ||
283 | |||
271 | #ifdef CONFIG_CBE_RAS | 284 | #ifdef CONFIG_CBE_RAS |
272 | STD_EXCEPTION_HV(0x1800, 0x1802, cbe_thermal) | 285 | STD_EXCEPTION_HV(0x1800, 0x1802, cbe_thermal) |
286 | KVM_HANDLER_PR_SKIP(PACA_EXGEN, EXC_HV, 0x1802) | ||
273 | #endif /* CONFIG_CBE_RAS */ | 287 | #endif /* CONFIG_CBE_RAS */ |
274 | 288 | ||
275 | . = 0x3000 | 289 | . = 0x3000 |
276 | 290 | ||
277 | /*** Out of line interrupts support ***/ | 291 | /*** Out of line interrupts support ***/ |
278 | 292 | ||
293 | /* moved from 0x200 */ | ||
294 | machine_check_pSeries: | ||
295 | .globl machine_check_fwnmi | ||
296 | machine_check_fwnmi: | ||
297 | HMT_MEDIUM | ||
298 | SET_SCRATCH0(r13) /* save r13 */ | ||
299 | EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common, | ||
300 | EXC_STD, KVMTEST, 0x200) | ||
301 | KVM_HANDLER_SKIP(PACA_EXMC, EXC_STD, 0x200) | ||
302 | |||
303 | #ifndef CONFIG_POWER4_ONLY | ||
304 | /* moved from 0x300 */ | ||
305 | data_access_check_stab: | ||
306 | GET_PACA(r13) | ||
307 | std r9,PACA_EXSLB+EX_R9(r13) | ||
308 | std r10,PACA_EXSLB+EX_R10(r13) | ||
309 | mfspr r10,SPRN_DAR | ||
310 | mfspr r9,SPRN_DSISR | ||
311 | srdi r10,r10,60 | ||
312 | rlwimi r10,r9,16,0x20 | ||
313 | #ifdef CONFIG_KVM_BOOK3S_PR | ||
314 | lbz r9,HSTATE_IN_GUEST(r13) | ||
315 | rlwimi r10,r9,8,0x300 | ||
316 | #endif | ||
317 | mfcr r9 | ||
318 | cmpwi r10,0x2c | ||
319 | beq do_stab_bolted_pSeries | ||
320 | mtcrf 0x80,r9 | ||
321 | ld r9,PACA_EXSLB+EX_R9(r13) | ||
322 | ld r10,PACA_EXSLB+EX_R10(r13) | ||
323 | b data_access_not_stab | ||
324 | do_stab_bolted_pSeries: | ||
325 | std r11,PACA_EXSLB+EX_R11(r13) | ||
326 | std r12,PACA_EXSLB+EX_R12(r13) | ||
327 | GET_SCRATCH0(r10) | ||
328 | std r10,PACA_EXSLB+EX_R13(r13) | ||
329 | EXCEPTION_PROLOG_PSERIES_1(.do_stab_bolted, EXC_STD) | ||
330 | #endif /* CONFIG_POWER4_ONLY */ | ||
331 | |||
332 | KVM_HANDLER_PR_SKIP(PACA_EXGEN, EXC_STD, 0x300) | ||
333 | KVM_HANDLER_PR_SKIP(PACA_EXSLB, EXC_STD, 0x380) | ||
334 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0x400) | ||
335 | KVM_HANDLER_PR(PACA_EXSLB, EXC_STD, 0x480) | ||
336 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0x900) | ||
337 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0x982) | ||
338 | |||
339 | .align 7 | ||
279 | /* moved from 0xe00 */ | 340 | /* moved from 0xe00 */ |
280 | STD_EXCEPTION_HV(., 0xe00, h_data_storage) | 341 | STD_EXCEPTION_HV(., 0xe02, h_data_storage) |
281 | STD_EXCEPTION_HV(., 0xe20, h_instr_storage) | 342 | KVM_HANDLER_SKIP(PACA_EXGEN, EXC_HV, 0xe02) |
282 | STD_EXCEPTION_HV(., 0xe40, emulation_assist) | 343 | STD_EXCEPTION_HV(., 0xe22, h_instr_storage) |
283 | STD_EXCEPTION_HV(., 0xe60, hmi_exception) /* need to flush cache ? */ | 344 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe22) |
345 | STD_EXCEPTION_HV(., 0xe42, emulation_assist) | ||
346 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe42) | ||
347 | STD_EXCEPTION_HV(., 0xe62, hmi_exception) /* need to flush cache ? */ | ||
348 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe62) | ||
284 | 349 | ||
285 | /* moved from 0xf00 */ | 350 | /* moved from 0xf00 */ |
286 | STD_EXCEPTION_PSERIES(., 0xf00, performance_monitor) | 351 | STD_EXCEPTION_PSERIES(., 0xf00, performance_monitor) |
352 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0xf00) | ||
287 | STD_EXCEPTION_PSERIES(., 0xf20, altivec_unavailable) | 353 | STD_EXCEPTION_PSERIES(., 0xf20, altivec_unavailable) |
354 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0xf20) | ||
288 | STD_EXCEPTION_PSERIES(., 0xf40, vsx_unavailable) | 355 | STD_EXCEPTION_PSERIES(., 0xf40, vsx_unavailable) |
356 | KVM_HANDLER_PR(PACA_EXGEN, EXC_STD, 0xf40) | ||
289 | 357 | ||
290 | /* | 358 | /* |
291 | * An interrupt came in while soft-disabled; clear EE in SRR1, | 359 | * An interrupt came in while soft-disabled; clear EE in SRR1, |
@@ -317,14 +385,6 @@ masked_Hinterrupt: | |||
317 | hrfid | 385 | hrfid |
318 | b . | 386 | b . |
319 | 387 | ||
320 | .align 7 | ||
321 | do_stab_bolted_pSeries: | ||
322 | std r11,PACA_EXSLB+EX_R11(r13) | ||
323 | std r12,PACA_EXSLB+EX_R12(r13) | ||
324 | GET_SCRATCH0(r10) | ||
325 | std r10,PACA_EXSLB+EX_R13(r13) | ||
326 | EXCEPTION_PROLOG_PSERIES_1(.do_stab_bolted, EXC_STD) | ||
327 | |||
328 | #ifdef CONFIG_PPC_PSERIES | 388 | #ifdef CONFIG_PPC_PSERIES |
329 | /* | 389 | /* |
330 | * Vectors for the FWNMI option. Share common code. | 390 | * Vectors for the FWNMI option. Share common code. |
@@ -334,14 +394,8 @@ do_stab_bolted_pSeries: | |||
334 | system_reset_fwnmi: | 394 | system_reset_fwnmi: |
335 | HMT_MEDIUM | 395 | HMT_MEDIUM |
336 | SET_SCRATCH0(r13) /* save r13 */ | 396 | SET_SCRATCH0(r13) /* save r13 */ |
337 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common, EXC_STD) | 397 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common, EXC_STD, |
338 | 398 | NOTEST, 0x100) | |
339 | .globl machine_check_fwnmi | ||
340 | .align 7 | ||
341 | machine_check_fwnmi: | ||
342 | HMT_MEDIUM | ||
343 | SET_SCRATCH0(r13) /* save r13 */ | ||
344 | EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common, EXC_STD) | ||
345 | 399 | ||
346 | #endif /* CONFIG_PPC_PSERIES */ | 400 | #endif /* CONFIG_PPC_PSERIES */ |
347 | 401 | ||
@@ -376,7 +430,11 @@ slb_miss_user_pseries: | |||
376 | /* KVM's trampoline code needs to be close to the interrupt handlers */ | 430 | /* KVM's trampoline code needs to be close to the interrupt handlers */ |
377 | 431 | ||
378 | #ifdef CONFIG_KVM_BOOK3S_64_HANDLER | 432 | #ifdef CONFIG_KVM_BOOK3S_64_HANDLER |
433 | #ifdef CONFIG_KVM_BOOK3S_PR | ||
379 | #include "../kvm/book3s_rmhandlers.S" | 434 | #include "../kvm/book3s_rmhandlers.S" |
435 | #else | ||
436 | #include "../kvm/book3s_hv_rmhandlers.S" | ||
437 | #endif | ||
380 | #endif | 438 | #endif |
381 | 439 | ||
382 | .align 7 | 440 | .align 7 |