powerpc: Remove use of a second scratch SPRG in STAB code
The STAB code used on Power3 and RS/64 uses a second scratch SPRG to save a GPR in order to decide whether to go to do_stab_bolted_* or to handle a normal data access exception. This prevents our scheme of freeing SPRG3 which is user visible for user uses since we cannot use SPRG0 which, on RS/64, seems to be read-only for supervisor mode (like POWER4). This reworks the STAB exception entry to use the PACA as temporary storage instead. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
@@ -66,8 +66,7 @@
|
||||
std r9,area+EX_R13(r13); \
|
||||
mfcr r9
|
||||
|
||||
#define EXCEPTION_PROLOG_PSERIES(area, label) \
|
||||
EXCEPTION_PROLOG_1(area); \
|
||||
#define EXCEPTION_PROLOG_PSERIES_1(label) \
|
||||
ld r12,PACAKBASE(r13); /* get high part of &label */ \
|
||||
ld r10,PACAKMSR(r13); /* get MSR value for kernel */ \
|
||||
mfspr r11,SPRN_SRR0; /* save SRR0 */ \
|
||||
@@ -78,6 +77,10 @@
|
||||
rfid; \
|
||||
b . /* prevent speculative execution */
|
||||
|
||||
#define EXCEPTION_PROLOG_PSERIES(area, label) \
|
||||
EXCEPTION_PROLOG_1(area); \
|
||||
EXCEPTION_PROLOG_PSERIES_1(label);
|
||||
|
||||
/*
|
||||
* The common exception prolog is used for all except a few exceptions
|
||||
* such as a segment miss on a kernel address. We have to be prepared
|
||||
|
@@ -654,7 +654,7 @@
|
||||
* 64-bit server:
|
||||
* - SPRG0 unused (reserved for HV on Power4)
|
||||
* - SPRG1 scratch for exception vectors
|
||||
* - SPRG2 scratch for exception vectors
|
||||
* - SPRG2 unused
|
||||
*
|
||||
* All 32-bit:
|
||||
* - SPRG3 current thread_info pointer
|
||||
@@ -707,7 +707,6 @@
|
||||
|
||||
#ifdef CONFIG_PPC_BOOK3S_64
|
||||
#define SPRN_SPRG_SCRATCH0 SPRN_SPRG1
|
||||
#define SPRN_SPRG_SCRATCH1 SPRN_SPRG2
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PPC_BOOK3S_32
|
||||
|
Reference in New Issue
Block a user