|
@@ -200,6 +200,21 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
|
|
|
#define EXCEPTION_PROLOG_PSERIES_1(label, h) \
|
|
|
__EXCEPTION_PROLOG_PSERIES_1(label, h)
|
|
|
|
|
|
+/* _NORI variant keeps MSR_RI clear */
|
|
|
+#define __EXCEPTION_PROLOG_PSERIES_1_NORI(label, h) \
|
|
|
+ ld r10,PACAKMSR(r13); /* get MSR value for kernel */ \
|
|
|
+ xori r10,r10,MSR_RI; /* Clear MSR_RI */ \
|
|
|
+ mfspr r11,SPRN_##h##SRR0; /* save SRR0 */ \
|
|
|
+ LOAD_HANDLER(r12,label) \
|
|
|
+ mtspr SPRN_##h##SRR0,r12; \
|
|
|
+ mfspr r12,SPRN_##h##SRR1; /* and SRR1 */ \
|
|
|
+ mtspr SPRN_##h##SRR1,r10; \
|
|
|
+ h##rfid; \
|
|
|
+ b . /* prevent speculative execution */
|
|
|
+
|
|
|
+#define EXCEPTION_PROLOG_PSERIES_1_NORI(label, h) \
|
|
|
+ __EXCEPTION_PROLOG_PSERIES_1_NORI(label, h)
|
|
|
+
|
|
|
#define EXCEPTION_PROLOG_PSERIES(area, label, h, extra, vec) \
|
|
|
EXCEPTION_PROLOG_0(area); \
|
|
|
EXCEPTION_PROLOG_1(area, extra, vec); \
|