powerpc: Restore VDSO information on critical exception om BookE
Critical exception on 64-bit booke uses user-visible SPRG3 as scratch. Restore VDSO information in SPRG3 on exception prolog. Use a common sprg3 field in PACA for all powerpc64 architectures. Signed-off-by: Mihai Caraman <mihai.caraman@freescale.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
8b64a9dfb0
commit
0127262c01
|
@ -74,7 +74,6 @@ struct kvmppc_host_state {
|
|||
ulong vmhandler;
|
||||
ulong scratch0;
|
||||
ulong scratch1;
|
||||
ulong sprg3;
|
||||
u8 in_guest;
|
||||
u8 restore_hid5;
|
||||
u8 napping;
|
||||
|
|
|
@ -136,6 +136,7 @@ struct paca_struct {
|
|||
u8 io_sync; /* writel() needs spin_unlock sync */
|
||||
u8 irq_work_pending; /* IRQ_WORK interrupt while soft-disable */
|
||||
u8 nap_state_lost; /* NV GPR values lost in power7_idle */
|
||||
u64 sprg3; /* Saved user-visible sprg */
|
||||
|
||||
#ifdef CONFIG_PPC_POWERNV
|
||||
/* Pointer to OPAL machine check event structure set by the
|
||||
|
|
|
@ -205,6 +205,7 @@ int main(void)
|
|||
DEFINE(PACA_SYSTEM_TIME, offsetof(struct paca_struct, system_time));
|
||||
DEFINE(PACA_TRAP_SAVE, offsetof(struct paca_struct, trap_save));
|
||||
DEFINE(PACA_NAPSTATELOST, offsetof(struct paca_struct, nap_state_lost));
|
||||
DEFINE(PACA_SPRG3, offsetof(struct paca_struct, sprg3));
|
||||
#endif /* CONFIG_PPC64 */
|
||||
|
||||
/* RTAS */
|
||||
|
@ -533,7 +534,6 @@ int main(void)
|
|||
HSTATE_FIELD(HSTATE_VMHANDLER, vmhandler);
|
||||
HSTATE_FIELD(HSTATE_SCRATCH0, scratch0);
|
||||
HSTATE_FIELD(HSTATE_SCRATCH1, scratch1);
|
||||
HSTATE_FIELD(HSTATE_SPRG3, sprg3);
|
||||
HSTATE_FIELD(HSTATE_IN_GUEST, in_guest);
|
||||
HSTATE_FIELD(HSTATE_RESTORE_HID5, restore_hid5);
|
||||
HSTATE_FIELD(HSTATE_NAPPING, napping);
|
||||
|
|
|
@ -110,7 +110,9 @@
|
|||
|
||||
#define PROLOG_STORE_RESTORE_SCRATCH_CRIT \
|
||||
mfspr r10,SPRN_SPRG_CRIT_SCRATCH; /* get r13 */ \
|
||||
std r10,PACA_EXCRIT+EX_R13(r13)
|
||||
std r10,PACA_EXCRIT+EX_R13(r13); \
|
||||
ld r11,PACA_SPRG3(r13); \
|
||||
mtspr SPRN_SPRG_CRIT_SCRATCH,r11;
|
||||
|
||||
/* Variants of the "addition" argument for the prolog
|
||||
*/
|
||||
|
|
|
@ -723,9 +723,7 @@ int __cpuinit vdso_getcpu_init(void)
|
|||
|
||||
val = (cpu & 0xfff) | ((node & 0xffff) << 16);
|
||||
mtspr(SPRN_SPRG3, val);
|
||||
#ifdef CONFIG_KVM_BOOK3S_HANDLER
|
||||
get_paca()->kvm_hstate.sprg3 = val;
|
||||
#endif
|
||||
get_paca()->sprg3 = val;
|
||||
|
||||
put_cpu();
|
||||
|
||||
|
|
|
@ -1065,7 +1065,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206)
|
|||
mtspr SPRN_DABRX,r6
|
||||
|
||||
/* Restore SPRG3 */
|
||||
ld r3,HSTATE_SPRG3(r13)
|
||||
ld r3,PACA_SPRG3(r13)
|
||||
mtspr SPRN_SPRG3,r3
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue