diff options
author | Paul Mackerras <paulus@samba.org> | 2011-04-04 23:59:58 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2011-04-19 21:03:23 -0400 |
commit | 673b189a2e3353061fa8c49515d1014dab6ad9b9 (patch) | |
tree | 71d5842f2dcfcd24370ef25f35c97f0f81ebae87 /arch | |
parent | b3e6b5dfcf0974069a8ddcce7dd071120d20d79c (diff) |
powerpc: Always use SPRN_SPRG_HSCRATCH0 when running in HV mode
This uses feature sections to arrange that we always use HSPRG1
as the scratch register in the interrupt entry code rather than
SPRG2 when we're running in hypervisor mode on POWER7. This will
ensure that we don't trash the guest's SPRG2 when we are running
KVM guests. To simplify the code, we define GET_SCRATCH0() and
SET_SCRATCH0() macros like the GET_PACA/SET_PACA macros.
Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/include/asm/exception-64s.h | 15 | ||||
-rw-r--r-- | arch/powerpc/include/asm/reg.h | 14 | ||||
-rw-r--r-- | arch/powerpc/kernel/exceptions-64s.S | 26 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_rmhandlers.S | 6 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_segment.S | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/iseries/exception.S | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/iseries/exception.h | 4 |
7 files changed, 41 insertions, 28 deletions
diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h index fb5b0af30fcf..d6b4849df9b1 100644 --- a/arch/powerpc/include/asm/exception-64s.h +++ b/arch/powerpc/include/asm/exception-64s.h | |||
@@ -60,16 +60,15 @@ | |||
60 | #define EXC_HV H | 60 | #define EXC_HV H |
61 | #define EXC_STD | 61 | #define EXC_STD |
62 | 62 | ||
63 | #define __EXCEPTION_PROLOG_1(area, h) \ | 63 | #define EXCEPTION_PROLOG_1(area) \ |
64 | GET_PACA(r13); \ | 64 | GET_PACA(r13); \ |
65 | std r9,area+EX_R9(r13); /* save r9 - r12 */ \ | 65 | std r9,area+EX_R9(r13); /* save r9 - r12 */ \ |
66 | std r10,area+EX_R10(r13); \ | 66 | std r10,area+EX_R10(r13); \ |
67 | std r11,area+EX_R11(r13); \ | 67 | std r11,area+EX_R11(r13); \ |
68 | std r12,area+EX_R12(r13); \ | 68 | std r12,area+EX_R12(r13); \ |
69 | mfspr r9,SPRN_SPRG_##h##SCRATCH0; \ | 69 | GET_SCRATCH0(r9); \ |
70 | std r9,area+EX_R13(r13); \ | 70 | std r9,area+EX_R13(r13); \ |
71 | mfcr r9 | 71 | mfcr r9 |
72 | #define EXCEPTION_PROLOG_1(area, h) __EXCEPTION_PROLOG_1(area, h) | ||
73 | 72 | ||
74 | #define __EXCEPTION_PROLOG_PSERIES_1(label, h) \ | 73 | #define __EXCEPTION_PROLOG_PSERIES_1(label, h) \ |
75 | ld r12,PACAKBASE(r13); /* get high part of &label */ \ | 74 | ld r12,PACAKBASE(r13); /* get high part of &label */ \ |
@@ -85,7 +84,7 @@ | |||
85 | __EXCEPTION_PROLOG_PSERIES_1(label, h) | 84 | __EXCEPTION_PROLOG_PSERIES_1(label, h) |
86 | 85 | ||
87 | #define EXCEPTION_PROLOG_PSERIES(area, label, h) \ | 86 | #define EXCEPTION_PROLOG_PSERIES(area, label, h) \ |
88 | EXCEPTION_PROLOG_1(area, h); \ | 87 | EXCEPTION_PROLOG_1(area); \ |
89 | EXCEPTION_PROLOG_PSERIES_1(label, h); | 88 | EXCEPTION_PROLOG_PSERIES_1(label, h); |
90 | 89 | ||
91 | /* | 90 | /* |
@@ -156,7 +155,7 @@ | |||
156 | label##_pSeries: \ | 155 | label##_pSeries: \ |
157 | HMT_MEDIUM; \ | 156 | HMT_MEDIUM; \ |
158 | DO_KVM vec; \ | 157 | DO_KVM vec; \ |
159 | mtspr SPRN_SPRG_SCRATCH0,r13; /* save r13 */ \ | 158 | SET_SCRATCH0(r13); /* save r13 */ \ |
160 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common, EXC_STD) | 159 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common, EXC_STD) |
161 | 160 | ||
162 | #define STD_EXCEPTION_HV(loc, vec, label) \ | 161 | #define STD_EXCEPTION_HV(loc, vec, label) \ |
@@ -165,13 +164,13 @@ label##_pSeries: \ | |||
165 | label##_hv: \ | 164 | label##_hv: \ |
166 | HMT_MEDIUM; \ | 165 | HMT_MEDIUM; \ |
167 | DO_KVM vec; \ | 166 | DO_KVM vec; \ |
168 | mtspr SPRN_SPRG_HSCRATCH0,r13;/* save r13 */ \ | 167 | SET_SCRATCH0(r13); /* save r13 */ \ |
169 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common, EXC_HV) | 168 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common, EXC_HV) |
170 | 169 | ||
171 | #define __MASKABLE_EXCEPTION_PSERIES(vec, label, h) \ | 170 | #define __MASKABLE_EXCEPTION_PSERIES(vec, label, h) \ |
172 | HMT_MEDIUM; \ | 171 | HMT_MEDIUM; \ |
173 | DO_KVM vec; \ | 172 | DO_KVM vec; \ |
174 | mtspr SPRN_SPRG_##h##SCRATCH0,r13; /* save r13 */ \ | 173 | SET_SCRATCH0(r13); /* save r13 */ \ |
175 | GET_PACA(r13); \ | 174 | GET_PACA(r13); \ |
176 | std r9,PACA_EXGEN+EX_R9(r13); /* save r9, r10 */ \ | 175 | std r9,PACA_EXGEN+EX_R9(r13); /* save r9, r10 */ \ |
177 | std r10,PACA_EXGEN+EX_R10(r13); \ | 176 | std r10,PACA_EXGEN+EX_R10(r13); \ |
@@ -179,7 +178,7 @@ label##_hv: \ | |||
179 | mfcr r9; \ | 178 | mfcr r9; \ |
180 | cmpwi r10,0; \ | 179 | cmpwi r10,0; \ |
181 | beq masked_##h##interrupt; \ | 180 | beq masked_##h##interrupt; \ |
182 | mfspr r10,SPRN_SPRG_##h##SCRATCH0; \ | 181 | GET_SCRATCH0(r10); \ |
183 | std r10,PACA_EXGEN+EX_R13(r13); \ | 182 | std r10,PACA_EXGEN+EX_R13(r13); \ |
184 | std r11,PACA_EXGEN+EX_R11(r13); \ | 183 | std r11,PACA_EXGEN+EX_R11(r13); \ |
185 | std r12,PACA_EXGEN+EX_R12(r13); \ | 184 | std r12,PACA_EXGEN+EX_R12(r13); \ |
diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h index 13429a0eba09..76d7d5fea5be 100644 --- a/arch/powerpc/include/asm/reg.h +++ b/arch/powerpc/include/asm/reg.h | |||
@@ -802,6 +802,20 @@ | |||
802 | FTR_SECTION_ELSE_NESTED(66); \ | 802 | FTR_SECTION_ELSE_NESTED(66); \ |
803 | mtspr SPRN_SPRG_HPACA,rX; \ | 803 | mtspr SPRN_SPRG_HPACA,rX; \ |
804 | ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_HVMODE_206, 66) | 804 | ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_HVMODE_206, 66) |
805 | |||
806 | #define GET_SCRATCH0(rX) \ | ||
807 | BEGIN_FTR_SECTION_NESTED(66); \ | ||
808 | mfspr rX,SPRN_SPRG_SCRATCH0; \ | ||
809 | FTR_SECTION_ELSE_NESTED(66); \ | ||
810 | mfspr rX,SPRN_SPRG_HSCRATCH0; \ | ||
811 | ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_HVMODE_206, 66) | ||
812 | |||
813 | #define SET_SCRATCH0(rX) \ | ||
814 | BEGIN_FTR_SECTION_NESTED(66); \ | ||
815 | mtspr SPRN_SPRG_SCRATCH0,rX; \ | ||
816 | FTR_SECTION_ELSE_NESTED(66); \ | ||
817 | mtspr SPRN_SPRG_HSCRATCH0,rX; \ | ||
818 | ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_HVMODE_206, 66) | ||
805 | #endif | 819 | #endif |
806 | 820 | ||
807 | #ifdef CONFIG_PPC_BOOK3E_64 | 821 | #ifdef CONFIG_PPC_BOOK3E_64 |
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index 805e20657868..e513c1d35b2a 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S | |||
@@ -43,7 +43,7 @@ __start_interrupts: | |||
43 | _machine_check_pSeries: | 43 | _machine_check_pSeries: |
44 | HMT_MEDIUM | 44 | HMT_MEDIUM |
45 | DO_KVM 0x200 | 45 | DO_KVM 0x200 |
46 | mtspr SPRN_SPRG_SCRATCH0,r13 /* save r13 */ | 46 | SET_SCRATCH0(r13) |
47 | EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common, EXC_STD) | 47 | EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common, EXC_STD) |
48 | 48 | ||
49 | . = 0x300 | 49 | . = 0x300 |
@@ -51,7 +51,7 @@ _machine_check_pSeries: | |||
51 | data_access_pSeries: | 51 | data_access_pSeries: |
52 | HMT_MEDIUM | 52 | HMT_MEDIUM |
53 | DO_KVM 0x300 | 53 | DO_KVM 0x300 |
54 | mtspr SPRN_SPRG_SCRATCH0,r13 | 54 | SET_SCRATCH0(r13) |
55 | BEGIN_FTR_SECTION | 55 | BEGIN_FTR_SECTION |
56 | GET_PACA(r13) | 56 | GET_PACA(r13) |
57 | std r9,PACA_EXSLB+EX_R9(r13) | 57 | std r9,PACA_EXSLB+EX_R9(r13) |
@@ -67,7 +67,7 @@ BEGIN_FTR_SECTION | |||
67 | std r11,PACA_EXGEN+EX_R11(r13) | 67 | std r11,PACA_EXGEN+EX_R11(r13) |
68 | ld r11,PACA_EXSLB+EX_R9(r13) | 68 | ld r11,PACA_EXSLB+EX_R9(r13) |
69 | std r12,PACA_EXGEN+EX_R12(r13) | 69 | std r12,PACA_EXGEN+EX_R12(r13) |
70 | mfspr r12,SPRN_SPRG_SCRATCH0 | 70 | GET_SCRATCH0(r12) |
71 | std r10,PACA_EXGEN+EX_R10(r13) | 71 | std r10,PACA_EXGEN+EX_R10(r13) |
72 | std r11,PACA_EXGEN+EX_R9(r13) | 72 | std r11,PACA_EXGEN+EX_R9(r13) |
73 | std r12,PACA_EXGEN+EX_R13(r13) | 73 | std r12,PACA_EXGEN+EX_R13(r13) |
@@ -81,7 +81,7 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_SLB) | |||
81 | data_access_slb_pSeries: | 81 | data_access_slb_pSeries: |
82 | HMT_MEDIUM | 82 | HMT_MEDIUM |
83 | DO_KVM 0x380 | 83 | DO_KVM 0x380 |
84 | mtspr SPRN_SPRG_SCRATCH0,r13 | 84 | SET_SCRATCH0(r13) |
85 | GET_PACA(r13) | 85 | GET_PACA(r13) |
86 | std r3,PACA_EXSLB+EX_R3(r13) | 86 | std r3,PACA_EXSLB+EX_R3(r13) |
87 | mfspr r3,SPRN_DAR | 87 | mfspr r3,SPRN_DAR |
@@ -95,7 +95,7 @@ data_access_slb_pSeries: | |||
95 | std r10,PACA_EXSLB+EX_R10(r13) | 95 | std r10,PACA_EXSLB+EX_R10(r13) |
96 | std r11,PACA_EXSLB+EX_R11(r13) | 96 | std r11,PACA_EXSLB+EX_R11(r13) |
97 | std r12,PACA_EXSLB+EX_R12(r13) | 97 | std r12,PACA_EXSLB+EX_R12(r13) |
98 | mfspr r10,SPRN_SPRG_SCRATCH0 | 98 | GET_SCRATCH0(r10) |
99 | std r10,PACA_EXSLB+EX_R13(r13) | 99 | std r10,PACA_EXSLB+EX_R13(r13) |
100 | mfspr r12,SPRN_SRR1 /* and SRR1 */ | 100 | mfspr r12,SPRN_SRR1 /* and SRR1 */ |
101 | #ifndef CONFIG_RELOCATABLE | 101 | #ifndef CONFIG_RELOCATABLE |
@@ -120,7 +120,7 @@ data_access_slb_pSeries: | |||
120 | instruction_access_slb_pSeries: | 120 | instruction_access_slb_pSeries: |
121 | HMT_MEDIUM | 121 | HMT_MEDIUM |
122 | DO_KVM 0x480 | 122 | DO_KVM 0x480 |
123 | mtspr SPRN_SPRG_SCRATCH0,r13 | 123 | SET_SCRATCH0(r13) |
124 | GET_PACA(r13) | 124 | GET_PACA(r13) |
125 | std r3,PACA_EXSLB+EX_R3(r13) | 125 | std r3,PACA_EXSLB+EX_R3(r13) |
126 | mfspr r3,SPRN_SRR0 /* SRR0 is faulting address */ | 126 | mfspr r3,SPRN_SRR0 /* SRR0 is faulting address */ |
@@ -134,7 +134,7 @@ instruction_access_slb_pSeries: | |||
134 | std r10,PACA_EXSLB+EX_R10(r13) | 134 | std r10,PACA_EXSLB+EX_R10(r13) |
135 | std r11,PACA_EXSLB+EX_R11(r13) | 135 | std r11,PACA_EXSLB+EX_R11(r13) |
136 | std r12,PACA_EXSLB+EX_R12(r13) | 136 | std r12,PACA_EXSLB+EX_R12(r13) |
137 | mfspr r10,SPRN_SPRG_SCRATCH0 | 137 | GET_SCRATCH0(r10) |
138 | std r10,PACA_EXSLB+EX_R13(r13) | 138 | std r10,PACA_EXSLB+EX_R13(r13) |
139 | mfspr r12,SPRN_SRR1 /* and SRR1 */ | 139 | mfspr r12,SPRN_SRR1 /* and SRR1 */ |
140 | #ifndef CONFIG_RELOCATABLE | 140 | #ifndef CONFIG_RELOCATABLE |
@@ -272,7 +272,7 @@ masked_interrupt: | |||
272 | rotldi r10,r10,16 | 272 | rotldi r10,r10,16 |
273 | mtspr SPRN_SRR1,r10 | 273 | mtspr SPRN_SRR1,r10 |
274 | ld r10,PACA_EXGEN+EX_R10(r13) | 274 | ld r10,PACA_EXGEN+EX_R10(r13) |
275 | mfspr r13,SPRN_SPRG_SCRATCH0 | 275 | GET_SCRATCH0(r13) |
276 | rfid | 276 | rfid |
277 | b . | 277 | b . |
278 | 278 | ||
@@ -285,7 +285,7 @@ masked_Hinterrupt: | |||
285 | rotldi r10,r10,16 | 285 | rotldi r10,r10,16 |
286 | mtspr SPRN_HSRR1,r10 | 286 | mtspr SPRN_HSRR1,r10 |
287 | ld r10,PACA_EXGEN+EX_R10(r13) | 287 | ld r10,PACA_EXGEN+EX_R10(r13) |
288 | mfspr r13,SPRN_SPRG_HSCRATCH0 | 288 | GET_SCRATCH0(r13) |
289 | hrfid | 289 | hrfid |
290 | b . | 290 | b . |
291 | 291 | ||
@@ -293,7 +293,7 @@ masked_Hinterrupt: | |||
293 | do_stab_bolted_pSeries: | 293 | do_stab_bolted_pSeries: |
294 | std r11,PACA_EXSLB+EX_R11(r13) | 294 | std r11,PACA_EXSLB+EX_R11(r13) |
295 | std r12,PACA_EXSLB+EX_R12(r13) | 295 | std r12,PACA_EXSLB+EX_R12(r13) |
296 | mfspr r10,SPRN_SPRG_SCRATCH0 | 296 | GET_SCRATCH0(r10) |
297 | std r10,PACA_EXSLB+EX_R13(r13) | 297 | std r10,PACA_EXSLB+EX_R13(r13) |
298 | EXCEPTION_PROLOG_PSERIES_1(.do_stab_bolted, EXC_STD) | 298 | EXCEPTION_PROLOG_PSERIES_1(.do_stab_bolted, EXC_STD) |
299 | 299 | ||
@@ -305,14 +305,14 @@ do_stab_bolted_pSeries: | |||
305 | .align 7 | 305 | .align 7 |
306 | system_reset_fwnmi: | 306 | system_reset_fwnmi: |
307 | HMT_MEDIUM | 307 | HMT_MEDIUM |
308 | mtspr SPRN_SPRG_SCRATCH0,r13 /* save r13 */ | 308 | SET_SCRATCH0(r13) /* save r13 */ |
309 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common, EXC_STD) | 309 | EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common, EXC_STD) |
310 | 310 | ||
311 | .globl machine_check_fwnmi | 311 | .globl machine_check_fwnmi |
312 | .align 7 | 312 | .align 7 |
313 | machine_check_fwnmi: | 313 | machine_check_fwnmi: |
314 | HMT_MEDIUM | 314 | HMT_MEDIUM |
315 | mtspr SPRN_SPRG_SCRATCH0,r13 /* save r13 */ | 315 | SET_SCRATCH0(r13) /* save r13 */ |
316 | EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common, EXC_STD) | 316 | EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common, EXC_STD) |
317 | 317 | ||
318 | #endif /* CONFIG_PPC_PSERIES */ | 318 | #endif /* CONFIG_PPC_PSERIES */ |
@@ -327,7 +327,7 @@ slb_miss_user_pseries: | |||
327 | std r10,PACA_EXGEN+EX_R10(r13) | 327 | std r10,PACA_EXGEN+EX_R10(r13) |
328 | std r11,PACA_EXGEN+EX_R11(r13) | 328 | std r11,PACA_EXGEN+EX_R11(r13) |
329 | std r12,PACA_EXGEN+EX_R12(r13) | 329 | std r12,PACA_EXGEN+EX_R12(r13) |
330 | mfspr r10,SPRG_SCRATCH0 | 330 | GET_SCRATCH0(r10) |
331 | ld r11,PACA_EXSLB+EX_R9(r13) | 331 | ld r11,PACA_EXSLB+EX_R9(r13) |
332 | ld r12,PACA_EXSLB+EX_R3(r13) | 332 | ld r12,PACA_EXSLB+EX_R3(r13) |
333 | std r10,PACA_EXGEN+EX_R13(r13) | 333 | std r10,PACA_EXGEN+EX_R13(r13) |
diff --git a/arch/powerpc/kvm/book3s_rmhandlers.S b/arch/powerpc/kvm/book3s_rmhandlers.S index 046e1f3d4432..ae99af66ca34 100644 --- a/arch/powerpc/kvm/book3s_rmhandlers.S +++ b/arch/powerpc/kvm/book3s_rmhandlers.S | |||
@@ -70,7 +70,7 @@ | |||
70 | .global kvmppc_trampoline_\intno | 70 | .global kvmppc_trampoline_\intno |
71 | kvmppc_trampoline_\intno: | 71 | kvmppc_trampoline_\intno: |
72 | 72 | ||
73 | mtspr SPRN_SPRG_SCRATCH0, r13 /* Save r13 */ | 73 | SET_SCRATCH0(r13) /* Save r13 */ |
74 | 74 | ||
75 | /* | 75 | /* |
76 | * First thing to do is to find out if we're coming | 76 | * First thing to do is to find out if we're coming |
@@ -89,7 +89,7 @@ kvmppc_trampoline_\intno: | |||
89 | lwz r12, (SHADOW_VCPU_OFF + SVCPU_SCRATCH1)(r13) | 89 | lwz r12, (SHADOW_VCPU_OFF + SVCPU_SCRATCH1)(r13) |
90 | mtcr r12 | 90 | mtcr r12 |
91 | PPC_LL r12, (SHADOW_VCPU_OFF + SVCPU_SCRATCH0)(r13) | 91 | PPC_LL r12, (SHADOW_VCPU_OFF + SVCPU_SCRATCH0)(r13) |
92 | mfspr r13, SPRN_SPRG_SCRATCH0 /* r13 = original r13 */ | 92 | GET_SCRATCH0(r13) /* r13 = original r13 */ |
93 | b kvmppc_resume_\intno /* Get back original handler */ | 93 | b kvmppc_resume_\intno /* Get back original handler */ |
94 | 94 | ||
95 | /* Now we know we're handling a KVM guest */ | 95 | /* Now we know we're handling a KVM guest */ |
@@ -157,7 +157,7 @@ kvmppc_handler_skip_ins: | |||
157 | lwz r12, (SHADOW_VCPU_OFF + SVCPU_SCRATCH1)(r13) | 157 | lwz r12, (SHADOW_VCPU_OFF + SVCPU_SCRATCH1)(r13) |
158 | mtcr r12 | 158 | mtcr r12 |
159 | PPC_LL r12, (SHADOW_VCPU_OFF + SVCPU_SCRATCH0)(r13) | 159 | PPC_LL r12, (SHADOW_VCPU_OFF + SVCPU_SCRATCH0)(r13) |
160 | mfspr r13, SPRN_SPRG_SCRATCH0 | 160 | GET_SCRATCH0(r13) |
161 | 161 | ||
162 | /* And get back into the code */ | 162 | /* And get back into the code */ |
163 | RFI | 163 | RFI |
diff --git a/arch/powerpc/kvm/book3s_segment.S b/arch/powerpc/kvm/book3s_segment.S index d842795d0f23..451264274b8c 100644 --- a/arch/powerpc/kvm/book3s_segment.S +++ b/arch/powerpc/kvm/book3s_segment.S | |||
@@ -168,7 +168,7 @@ kvmppc_handler_trampoline_exit: | |||
168 | PPC_STL r4, (SHADOW_VCPU_OFF + SVCPU_SHADOW_SRR1)(r13) | 168 | PPC_STL r4, (SHADOW_VCPU_OFF + SVCPU_SHADOW_SRR1)(r13) |
169 | 169 | ||
170 | /* Get scratch'ed off registers */ | 170 | /* Get scratch'ed off registers */ |
171 | mfspr r9, SPRN_SPRG_SCRATCH0 | 171 | GET_SCRATCH0(r9) |
172 | PPC_LL r8, (SHADOW_VCPU_OFF + SVCPU_SCRATCH0)(r13) | 172 | PPC_LL r8, (SHADOW_VCPU_OFF + SVCPU_SCRATCH0)(r13) |
173 | lwz r7, (SHADOW_VCPU_OFF + SVCPU_SCRATCH1)(r13) | 173 | lwz r7, (SHADOW_VCPU_OFF + SVCPU_SCRATCH1)(r13) |
174 | 174 | ||
diff --git a/arch/powerpc/platforms/iseries/exception.S b/arch/powerpc/platforms/iseries/exception.S index f7a487231a11..32a56c6dfa72 100644 --- a/arch/powerpc/platforms/iseries/exception.S +++ b/arch/powerpc/platforms/iseries/exception.S | |||
@@ -155,7 +155,7 @@ BEGIN_FTR_SECTION | |||
155 | std r12,PACA_EXGEN+EX_R13(r13) | 155 | std r12,PACA_EXGEN+EX_R13(r13) |
156 | EXCEPTION_PROLOG_ISERIES_1 | 156 | EXCEPTION_PROLOG_ISERIES_1 |
157 | FTR_SECTION_ELSE | 157 | FTR_SECTION_ELSE |
158 | EXCEPTION_PROLOG_1(PACA_EXGEN, EXC_STD) | 158 | EXCEPTION_PROLOG_1(PACA_EXGEN) |
159 | EXCEPTION_PROLOG_ISERIES_1 | 159 | EXCEPTION_PROLOG_ISERIES_1 |
160 | ALT_FTR_SECTION_END_IFCLR(CPU_FTR_SLB) | 160 | ALT_FTR_SECTION_END_IFCLR(CPU_FTR_SLB) |
161 | b data_access_common | 161 | b data_access_common |
diff --git a/arch/powerpc/platforms/iseries/exception.h b/arch/powerpc/platforms/iseries/exception.h index 57127d805fe3..bae3fba5ad8e 100644 --- a/arch/powerpc/platforms/iseries/exception.h +++ b/arch/powerpc/platforms/iseries/exception.h | |||
@@ -39,7 +39,7 @@ | |||
39 | label##_iSeries: \ | 39 | label##_iSeries: \ |
40 | HMT_MEDIUM; \ | 40 | HMT_MEDIUM; \ |
41 | mtspr SPRN_SPRG_SCRATCH0,r13; /* save r13 */ \ | 41 | mtspr SPRN_SPRG_SCRATCH0,r13; /* save r13 */ \ |
42 | EXCEPTION_PROLOG_1(area, EXC_STD); \ | 42 | EXCEPTION_PROLOG_1(area); \ |
43 | EXCEPTION_PROLOG_ISERIES_1; \ | 43 | EXCEPTION_PROLOG_ISERIES_1; \ |
44 | b label##_common | 44 | b label##_common |
45 | 45 | ||
@@ -48,7 +48,7 @@ label##_iSeries: \ | |||
48 | label##_iSeries: \ | 48 | label##_iSeries: \ |
49 | HMT_MEDIUM; \ | 49 | HMT_MEDIUM; \ |
50 | mtspr SPRN_SPRG_SCRATCH0,r13; /* save r13 */ \ | 50 | mtspr SPRN_SPRG_SCRATCH0,r13; /* save r13 */ \ |
51 | EXCEPTION_PROLOG_1(PACA_EXGEN, EXC_STD); \ | 51 | EXCEPTION_PROLOG_1(PACA_EXGEN); \ |
52 | lbz r10,PACASOFTIRQEN(r13); \ | 52 | lbz r10,PACASOFTIRQEN(r13); \ |
53 | cmpwi 0,r10,0; \ | 53 | cmpwi 0,r10,0; \ |
54 | beq- label##_iSeries_masked; \ | 54 | beq- label##_iSeries_masked; \ |