Commit efe8bc07 authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Greg Kroah-Hartman

powerpc/64s: Simple RFI macro conversions

commit 222f20f1 upstream.

This commit does simple conversions of rfi/rfid to the new macros that
include the expected destination context. By simple we mean cases
where there is a single well known destination context, and it's
simply a matter of substituting the instruction for the appropriate
macro.
Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
[mpe: Backport to 4.9, use RFI_TO_KERNEL in idle_book3s.S]
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 3146a32b
...@@ -242,7 +242,7 @@ END_FTR_SECTION_NESTED(ftr,ftr,943) ...@@ -242,7 +242,7 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
mtspr SPRN_##h##SRR0,r12; \ mtspr SPRN_##h##SRR0,r12; \
mfspr r12,SPRN_##h##SRR1; /* and SRR1 */ \ mfspr r12,SPRN_##h##SRR1; /* and SRR1 */ \
mtspr SPRN_##h##SRR1,r10; \ mtspr SPRN_##h##SRR1,r10; \
h##rfid; \ h##RFI_TO_KERNEL; \
b . /* prevent speculative execution */ b . /* prevent speculative execution */
#define EXCEPTION_PROLOG_PSERIES_1(label, h) \ #define EXCEPTION_PROLOG_PSERIES_1(label, h) \
__EXCEPTION_PROLOG_PSERIES_1(label, h) __EXCEPTION_PROLOG_PSERIES_1(label, h)
......
...@@ -401,8 +401,7 @@ tabort_syscall: ...@@ -401,8 +401,7 @@ tabort_syscall:
mtmsrd r10, 1 mtmsrd r10, 1
mtspr SPRN_SRR0, r11 mtspr SPRN_SRR0, r11
mtspr SPRN_SRR1, r12 mtspr SPRN_SRR1, r12
RFI_TO_USER
rfid
b . /* prevent speculative execution */ b . /* prevent speculative execution */
#endif #endif
...@@ -1078,7 +1077,7 @@ _GLOBAL(enter_rtas) ...@@ -1078,7 +1077,7 @@ _GLOBAL(enter_rtas)
mtspr SPRN_SRR0,r5 mtspr SPRN_SRR0,r5
mtspr SPRN_SRR1,r6 mtspr SPRN_SRR1,r6
rfid RFI_TO_KERNEL
b . /* prevent speculative execution */ b . /* prevent speculative execution */
rtas_return_loc: rtas_return_loc:
...@@ -1103,7 +1102,7 @@ rtas_return_loc: ...@@ -1103,7 +1102,7 @@ rtas_return_loc:
mtspr SPRN_SRR0,r3 mtspr SPRN_SRR0,r3
mtspr SPRN_SRR1,r4 mtspr SPRN_SRR1,r4
rfid RFI_TO_KERNEL
b . /* prevent speculative execution */ b . /* prevent speculative execution */
.align 3 .align 3
...@@ -1174,7 +1173,7 @@ _GLOBAL(enter_prom) ...@@ -1174,7 +1173,7 @@ _GLOBAL(enter_prom)
LOAD_REG_IMMEDIATE(r12, MSR_SF | MSR_ISF | MSR_LE) LOAD_REG_IMMEDIATE(r12, MSR_SF | MSR_ISF | MSR_LE)
andc r11,r11,r12 andc r11,r11,r12
mtsrr1 r11 mtsrr1 r11
rfid RFI_TO_KERNEL
#endif /* CONFIG_PPC_BOOK3E */ #endif /* CONFIG_PPC_BOOK3E */
1: /* Return from OF */ 1: /* Return from OF */
......
...@@ -244,7 +244,7 @@ BEGIN_FTR_SECTION ...@@ -244,7 +244,7 @@ BEGIN_FTR_SECTION
LOAD_HANDLER(r12, machine_check_handle_early) LOAD_HANDLER(r12, machine_check_handle_early)
1: mtspr SPRN_SRR0,r12 1: mtspr SPRN_SRR0,r12
mtspr SPRN_SRR1,r11 mtspr SPRN_SRR1,r11
rfid RFI_TO_KERNEL
b . /* prevent speculative execution */ b . /* prevent speculative execution */
2: 2:
/* Stack overflow. Stay on emergency stack and panic. /* Stack overflow. Stay on emergency stack and panic.
...@@ -280,7 +280,7 @@ machine_check_pSeries_0: ...@@ -280,7 +280,7 @@ machine_check_pSeries_0:
mtspr SPRN_SRR0,r12 mtspr SPRN_SRR0,r12
mfspr r12,SPRN_SRR1 mfspr r12,SPRN_SRR1
mtspr SPRN_SRR1,r10 mtspr SPRN_SRR1,r10
rfid RFI_TO_KERNEL
b . /* prevent speculative execution */ b . /* prevent speculative execution */
TRAMP_KVM_SKIP(PACA_EXMC, 0x200) TRAMP_KVM_SKIP(PACA_EXMC, 0x200)
...@@ -446,7 +446,7 @@ EXC_COMMON_BEGIN(machine_check_handle_early) ...@@ -446,7 +446,7 @@ EXC_COMMON_BEGIN(machine_check_handle_early)
li r3,MSR_ME li r3,MSR_ME
andc r10,r10,r3 /* Turn off MSR_ME */ andc r10,r10,r3 /* Turn off MSR_ME */
mtspr SPRN_SRR1,r10 mtspr SPRN_SRR1,r10
rfid RFI_TO_KERNEL
b . b .
2: 2:
/* /*
...@@ -464,7 +464,7 @@ EXC_COMMON_BEGIN(machine_check_handle_early) ...@@ -464,7 +464,7 @@ EXC_COMMON_BEGIN(machine_check_handle_early)
*/ */
bl machine_check_queue_event bl machine_check_queue_event
MACHINE_CHECK_HANDLER_WINDUP MACHINE_CHECK_HANDLER_WINDUP
rfid RFI_TO_USER_OR_KERNEL
9: 9:
/* Deliver the machine check to host kernel in V mode. */ /* Deliver the machine check to host kernel in V mode. */
MACHINE_CHECK_HANDLER_WINDUP MACHINE_CHECK_HANDLER_WINDUP
...@@ -706,7 +706,7 @@ END_MMU_FTR_SECTION_IFCLR(MMU_FTR_TYPE_RADIX) ...@@ -706,7 +706,7 @@ END_MMU_FTR_SECTION_IFCLR(MMU_FTR_TYPE_RADIX)
mtspr SPRN_SRR0,r10 mtspr SPRN_SRR0,r10
ld r10,PACAKMSR(r13) ld r10,PACAKMSR(r13)
mtspr SPRN_SRR1,r10 mtspr SPRN_SRR1,r10
rfid RFI_TO_KERNEL
b . b .
EXC_COMMON_BEGIN(unrecov_slb) EXC_COMMON_BEGIN(unrecov_slb)
...@@ -893,7 +893,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_REAL_LE) \ ...@@ -893,7 +893,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_REAL_LE) \
mtspr SPRN_SRR0,r10 ; \ mtspr SPRN_SRR0,r10 ; \
ld r10,PACAKMSR(r13) ; \ ld r10,PACAKMSR(r13) ; \
mtspr SPRN_SRR1,r10 ; \ mtspr SPRN_SRR1,r10 ; \
rfid ; \ RFI_TO_KERNEL ; \
b . ; /* prevent speculative execution */ b . ; /* prevent speculative execution */
#define SYSCALL_PSERIES_3 \ #define SYSCALL_PSERIES_3 \
...@@ -901,7 +901,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_REAL_LE) \ ...@@ -901,7 +901,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_REAL_LE) \
1: mfspr r12,SPRN_SRR1 ; \ 1: mfspr r12,SPRN_SRR1 ; \
xori r12,r12,MSR_LE ; \ xori r12,r12,MSR_LE ; \
mtspr SPRN_SRR1,r12 ; \ mtspr SPRN_SRR1,r12 ; \
rfid ; /* return to userspace */ \ RFI_TO_USER ; /* return to userspace */ \
b . ; /* prevent speculative execution */ b . ; /* prevent speculative execution */
#if defined(CONFIG_RELOCATABLE) #if defined(CONFIG_RELOCATABLE)
...@@ -1276,7 +1276,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_CFAR) ...@@ -1276,7 +1276,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_CFAR)
ld r11,PACA_EXGEN+EX_R11(r13) ld r11,PACA_EXGEN+EX_R11(r13)
ld r12,PACA_EXGEN+EX_R12(r13) ld r12,PACA_EXGEN+EX_R12(r13)
ld r13,PACA_EXGEN+EX_R13(r13) ld r13,PACA_EXGEN+EX_R13(r13)
HRFID HRFI_TO_UNKNOWN
b . b .
#endif #endif
...@@ -1350,7 +1350,7 @@ masked_##_H##interrupt: \ ...@@ -1350,7 +1350,7 @@ masked_##_H##interrupt: \
ld r10,PACA_EXGEN+EX_R10(r13); \ ld r10,PACA_EXGEN+EX_R10(r13); \
ld r11,PACA_EXGEN+EX_R11(r13); \ ld r11,PACA_EXGEN+EX_R11(r13); \
GET_SCRATCH0(r13); \ GET_SCRATCH0(r13); \
##_H##rfid; \ ##_H##RFI_TO_KERNEL; \
b . b .
/* /*
...@@ -1372,7 +1372,7 @@ TRAMP_REAL_BEGIN(kvmppc_skip_interrupt) ...@@ -1372,7 +1372,7 @@ TRAMP_REAL_BEGIN(kvmppc_skip_interrupt)
addi r13, r13, 4 addi r13, r13, 4
mtspr SPRN_SRR0, r13 mtspr SPRN_SRR0, r13
GET_SCRATCH0(r13) GET_SCRATCH0(r13)
rfid RFI_TO_KERNEL
b . b .
TRAMP_REAL_BEGIN(kvmppc_skip_Hinterrupt) TRAMP_REAL_BEGIN(kvmppc_skip_Hinterrupt)
...@@ -1384,7 +1384,7 @@ TRAMP_REAL_BEGIN(kvmppc_skip_Hinterrupt) ...@@ -1384,7 +1384,7 @@ TRAMP_REAL_BEGIN(kvmppc_skip_Hinterrupt)
addi r13, r13, 4 addi r13, r13, 4
mtspr SPRN_HSRR0, r13 mtspr SPRN_HSRR0, r13
GET_SCRATCH0(r13) GET_SCRATCH0(r13)
hrfid HRFI_TO_KERNEL
b . b .
#endif #endif
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
*/ */
#include <linux/threads.h> #include <linux/threads.h>
#include <asm/exception-64s.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/cputable.h> #include <asm/cputable.h>
...@@ -178,7 +179,7 @@ _GLOBAL(pnv_powersave_common) ...@@ -178,7 +179,7 @@ _GLOBAL(pnv_powersave_common)
mtmsrd r6, 1 /* clear RI before setting SRR0/1 */ mtmsrd r6, 1 /* clear RI before setting SRR0/1 */
mtspr SPRN_SRR0, r5 mtspr SPRN_SRR0, r5
mtspr SPRN_SRR1, r7 mtspr SPRN_SRR1, r7
rfid RFI_TO_KERNEL
.globl pnv_enter_arch207_idle_mode .globl pnv_enter_arch207_idle_mode
pnv_enter_arch207_idle_mode: pnv_enter_arch207_idle_mode:
...@@ -668,7 +669,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) ...@@ -668,7 +669,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
mtcr r6 mtcr r6
mtspr SPRN_SRR1,r4 mtspr SPRN_SRR1,r4
mtspr SPRN_SRR0,r5 mtspr SPRN_SRR0,r5
rfid RFI_TO_KERNEL
/* /*
* R3 here contains the value that will be returned to the caller * R3 here contains the value that will be returned to the caller
...@@ -689,4 +690,4 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) ...@@ -689,4 +690,4 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
mtcr r6 mtcr r6
mtspr SPRN_SRR1,r4 mtspr SPRN_SRR1,r4
mtspr SPRN_SRR0,r5 mtspr SPRN_SRR0,r5
rfid RFI_TO_KERNEL
...@@ -65,7 +65,7 @@ _GLOBAL_TOC(kvmppc_hv_entry_trampoline) ...@@ -65,7 +65,7 @@ _GLOBAL_TOC(kvmppc_hv_entry_trampoline)
mtmsrd r0,1 /* clear RI in MSR */ mtmsrd r0,1 /* clear RI in MSR */
mtsrr0 r5 mtsrr0 r5
mtsrr1 r6 mtsrr1 r6
RFI RFI_TO_KERNEL
kvmppc_call_hv_entry: kvmppc_call_hv_entry:
ld r4, HSTATE_KVM_VCPU(r13) ld r4, HSTATE_KVM_VCPU(r13)
...@@ -171,7 +171,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S) ...@@ -171,7 +171,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
mtsrr0 r8 mtsrr0 r8
mtsrr1 r7 mtsrr1 r7
beq cr1, 13f /* machine check */ beq cr1, 13f /* machine check */
RFI RFI_TO_KERNEL
/* On POWER7, we have external interrupts set to use HSRR0/1 */ /* On POWER7, we have external interrupts set to use HSRR0/1 */
11: mtspr SPRN_HSRR0, r8 11: mtspr SPRN_HSRR0, r8
...@@ -1018,8 +1018,7 @@ BEGIN_FTR_SECTION ...@@ -1018,8 +1018,7 @@ BEGIN_FTR_SECTION
END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
ld r0, VCPU_GPR(R0)(r4) ld r0, VCPU_GPR(R0)(r4)
ld r4, VCPU_GPR(R4)(r4) ld r4, VCPU_GPR(R4)(r4)
HRFI_TO_GUEST
hrfid
b . b .
secondary_too_late: secondary_too_late:
......
...@@ -46,6 +46,9 @@ ...@@ -46,6 +46,9 @@
#define FUNC(name) name #define FUNC(name) name
#define RFI_TO_KERNEL RFI
#define RFI_TO_GUEST RFI
.macro INTERRUPT_TRAMPOLINE intno .macro INTERRUPT_TRAMPOLINE intno
.global kvmppc_trampoline_\intno .global kvmppc_trampoline_\intno
...@@ -141,7 +144,7 @@ kvmppc_handler_skip_ins: ...@@ -141,7 +144,7 @@ kvmppc_handler_skip_ins:
GET_SCRATCH0(r13) GET_SCRATCH0(r13)
/* And get back into the code */ /* And get back into the code */
RFI RFI_TO_KERNEL
#endif #endif
/* /*
...@@ -164,6 +167,6 @@ _GLOBAL_TOC(kvmppc_entry_trampoline) ...@@ -164,6 +167,6 @@ _GLOBAL_TOC(kvmppc_entry_trampoline)
ori r5, r5, MSR_EE ori r5, r5, MSR_EE
mtsrr0 r7 mtsrr0 r7
mtsrr1 r6 mtsrr1 r6
RFI RFI_TO_KERNEL
#include "book3s_segment.S" #include "book3s_segment.S"
...@@ -156,7 +156,7 @@ no_dcbz32_on: ...@@ -156,7 +156,7 @@ no_dcbz32_on:
PPC_LL r9, SVCPU_R9(r3) PPC_LL r9, SVCPU_R9(r3)
PPC_LL r3, (SVCPU_R3)(r3) PPC_LL r3, (SVCPU_R3)(r3)
RFI RFI_TO_GUEST
kvmppc_handler_trampoline_enter_end: kvmppc_handler_trampoline_enter_end:
...@@ -389,5 +389,5 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) ...@@ -389,5 +389,5 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
cmpwi r12, BOOK3S_INTERRUPT_DOORBELL cmpwi r12, BOOK3S_INTERRUPT_DOORBELL
beqa BOOK3S_INTERRUPT_DOORBELL beqa BOOK3S_INTERRUPT_DOORBELL
RFI RFI_TO_KERNEL
kvmppc_handler_trampoline_exit_end: kvmppc_handler_trampoline_exit_end:
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment