|
@@ -158,14 +158,17 @@ BEGIN_FTR_SECTION_NESTED(943) \
|
|
std ra,offset(r13); \
|
|
std ra,offset(r13); \
|
|
END_FTR_SECTION_NESTED(ftr,ftr,943)
|
|
END_FTR_SECTION_NESTED(ftr,ftr,943)
|
|
|
|
|
|
-#define EXCEPTION_PROLOG_0(area) \
|
|
|
|
- GET_PACA(r13); \
|
|
|
|
|
|
+#define EXCEPTION_PROLOG_0_PACA(area) \
|
|
std r9,area+EX_R9(r13); /* save r9 */ \
|
|
std r9,area+EX_R9(r13); /* save r9 */ \
|
|
OPT_GET_SPR(r9, SPRN_PPR, CPU_FTR_HAS_PPR); \
|
|
OPT_GET_SPR(r9, SPRN_PPR, CPU_FTR_HAS_PPR); \
|
|
HMT_MEDIUM; \
|
|
HMT_MEDIUM; \
|
|
std r10,area+EX_R10(r13); /* save r10 - r12 */ \
|
|
std r10,area+EX_R10(r13); /* save r10 - r12 */ \
|
|
OPT_GET_SPR(r10, SPRN_CFAR, CPU_FTR_CFAR)
|
|
OPT_GET_SPR(r10, SPRN_CFAR, CPU_FTR_CFAR)
|
|
|
|
|
|
|
|
+#define EXCEPTION_PROLOG_0(area) \
|
|
|
|
+ GET_PACA(r13); \
|
|
|
|
+ EXCEPTION_PROLOG_0_PACA(area)
|
|
|
|
+
|
|
#define __EXCEPTION_PROLOG_1(area, extra, vec) \
|
|
#define __EXCEPTION_PROLOG_1(area, extra, vec) \
|
|
OPT_SAVE_REG_TO_PACA(area+EX_PPR, r9, CPU_FTR_HAS_PPR); \
|
|
OPT_SAVE_REG_TO_PACA(area+EX_PPR, r9, CPU_FTR_HAS_PPR); \
|
|
OPT_SAVE_REG_TO_PACA(area+EX_CFAR, r10, CPU_FTR_CFAR); \
|
|
OPT_SAVE_REG_TO_PACA(area+EX_CFAR, r10, CPU_FTR_CFAR); \
|
|
@@ -196,6 +199,12 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
|
|
EXCEPTION_PROLOG_1(area, extra, vec); \
|
|
EXCEPTION_PROLOG_1(area, extra, vec); \
|
|
EXCEPTION_PROLOG_PSERIES_1(label, h);
|
|
EXCEPTION_PROLOG_PSERIES_1(label, h);
|
|
|
|
|
|
|
|
+/* Have the PACA in r13 already */
|
|
|
|
+#define EXCEPTION_PROLOG_PSERIES_PACA(area, label, h, extra, vec) \
|
|
|
|
+ EXCEPTION_PROLOG_0_PACA(area); \
|
|
|
|
+ EXCEPTION_PROLOG_1(area, extra, vec); \
|
|
|
|
+ EXCEPTION_PROLOG_PSERIES_1(label, h);
|
|
|
|
+
|
|
#define __KVMTEST(h, n) \
|
|
#define __KVMTEST(h, n) \
|
|
lbz r10,HSTATE_IN_GUEST(r13); \
|
|
lbz r10,HSTATE_IN_GUEST(r13); \
|
|
cmpwi r10,0; \
|
|
cmpwi r10,0; \
|