mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-24 02:18:54 +00:00
powerpc: Make room in exception vector area
The FWNMI region is fixed at 0x7000 and the vector are now overflowing that with some configurations. Fix that by moving some hash management code out of that region as it doesn't need to be that close to the call sites (isn't accessed using conditional branches). Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
e13e895f84
commit
6138340767
@ -1180,6 +1180,61 @@ END_FTR_SECTION_IFSET(CPU_FTR_VSX)
|
||||
.globl __end_handlers
|
||||
__end_handlers:
|
||||
|
||||
/* Equivalents to the above handlers for relocation-on interrupt vectors */
|
||||
STD_RELON_EXCEPTION_HV(., 0xe00, h_data_storage)
|
||||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe00)
|
||||
STD_RELON_EXCEPTION_HV(., 0xe20, h_instr_storage)
|
||||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe20)
|
||||
STD_RELON_EXCEPTION_HV(., 0xe40, emulation_assist)
|
||||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe40)
|
||||
STD_RELON_EXCEPTION_HV(., 0xe60, hmi_exception)
|
||||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe60)
|
||||
MASKABLE_RELON_EXCEPTION_HV(., 0xe80, h_doorbell)
|
||||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe80)
|
||||
|
||||
STD_RELON_EXCEPTION_PSERIES(., 0xf00, performance_monitor)
|
||||
STD_RELON_EXCEPTION_PSERIES(., 0xf20, altivec_unavailable)
|
||||
STD_RELON_EXCEPTION_PSERIES(., 0xf40, vsx_unavailable)
|
||||
|
||||
#if defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV)
|
||||
/*
|
||||
* Data area reserved for FWNMI option.
|
||||
* This address (0x7000) is fixed by the RPA.
|
||||
*/
|
||||
.= 0x7000
|
||||
.globl fwnmi_data_area
|
||||
fwnmi_data_area:
|
||||
|
||||
/* pseries and powernv need to keep the whole page from
|
||||
* 0x7000 to 0x8000 free for use by the firmware
|
||||
*/
|
||||
. = 0x8000
|
||||
#endif /* defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV) */
|
||||
|
||||
/* Space for CPU0's segment table */
|
||||
.balign 4096
|
||||
.globl initial_stab
|
||||
initial_stab:
|
||||
.space 4096
|
||||
|
||||
#ifdef CONFIG_PPC_POWERNV
|
||||
_GLOBAL(opal_mc_secondary_handler)
|
||||
HMT_MEDIUM_PPR_DISCARD
|
||||
SET_SCRATCH0(r13)
|
||||
GET_PACA(r13)
|
||||
clrldi r3,r3,2
|
||||
tovirt(r3,r3)
|
||||
std r3,PACA_OPAL_MC_EVT(r13)
|
||||
ld r13,OPAL_MC_SRR0(r3)
|
||||
mtspr SPRN_SRR0,r13
|
||||
ld r13,OPAL_MC_SRR1(r3)
|
||||
mtspr SPRN_SRR1,r13
|
||||
ld r3,OPAL_MC_GPR3(r3)
|
||||
GET_SCRATCH0(r13)
|
||||
b machine_check_pSeries
|
||||
#endif /* CONFIG_PPC_POWERNV */
|
||||
|
||||
|
||||
/*
|
||||
* Hash table stuff
|
||||
*/
|
||||
@ -1373,58 +1428,3 @@ _GLOBAL(do_stab_bolted)
|
||||
ld r13,PACA_EXSLB+EX_R13(r13)
|
||||
rfid
|
||||
b . /* prevent speculative execution */
|
||||
|
||||
|
||||
/* Equivalents to the above handlers for relocation-on interrupt vectors */
|
||||
STD_RELON_EXCEPTION_HV(., 0xe00, h_data_storage)
|
||||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe00)
|
||||
STD_RELON_EXCEPTION_HV(., 0xe20, h_instr_storage)
|
||||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe20)
|
||||
STD_RELON_EXCEPTION_HV(., 0xe40, emulation_assist)
|
||||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe40)
|
||||
STD_RELON_EXCEPTION_HV(., 0xe60, hmi_exception)
|
||||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe60)
|
||||
MASKABLE_RELON_EXCEPTION_HV(., 0xe80, h_doorbell)
|
||||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe80)
|
||||
|
||||
STD_RELON_EXCEPTION_PSERIES(., 0xf00, performance_monitor)
|
||||
STD_RELON_EXCEPTION_PSERIES(., 0xf20, altivec_unavailable)
|
||||
STD_RELON_EXCEPTION_PSERIES(., 0xf40, vsx_unavailable)
|
||||
|
||||
#if defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV)
|
||||
/*
|
||||
* Data area reserved for FWNMI option.
|
||||
* This address (0x7000) is fixed by the RPA.
|
||||
*/
|
||||
.= 0x7000
|
||||
.globl fwnmi_data_area
|
||||
fwnmi_data_area:
|
||||
|
||||
/* pseries and powernv need to keep the whole page from
|
||||
* 0x7000 to 0x8000 free for use by the firmware
|
||||
*/
|
||||
. = 0x8000
|
||||
#endif /* defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV) */
|
||||
|
||||
/* Space for CPU0's segment table */
|
||||
.balign 4096
|
||||
.globl initial_stab
|
||||
initial_stab:
|
||||
.space 4096
|
||||
|
||||
#ifdef CONFIG_PPC_POWERNV
|
||||
_GLOBAL(opal_mc_secondary_handler)
|
||||
HMT_MEDIUM_PPR_DISCARD
|
||||
SET_SCRATCH0(r13)
|
||||
GET_PACA(r13)
|
||||
clrldi r3,r3,2
|
||||
tovirt(r3,r3)
|
||||
std r3,PACA_OPAL_MC_EVT(r13)
|
||||
ld r13,OPAL_MC_SRR0(r3)
|
||||
mtspr SPRN_SRR0,r13
|
||||
ld r13,OPAL_MC_SRR1(r3)
|
||||
mtspr SPRN_SRR1,r13
|
||||
ld r3,OPAL_MC_GPR3(r3)
|
||||
GET_SCRATCH0(r13)
|
||||
b machine_check_pSeries
|
||||
#endif /* CONFIG_PPC_POWERNV */
|
||||
|
Loading…
Reference in New Issue
Block a user