Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc: Use SWITCH_FRAME_SIZE for prom and rtas entry

Commit 6c1719942e19 ("powerpc/of: Remove useless register save/restore
when calling OF back") removed the saving of srr0 and srr1 when calling
into OpenFirmware. Commit e31aa453bbc4 ("powerpc: Use LOAD_REG_IMMEDIATE
only for constants on 64-bit") did the same for rtas.

This means we don't need to save the extra stack space and can use
the common SWITCH_FRAME_SIZE.

There were already no users of _SRR0 and _SRR1 so we can remove them
too.

Link: https://github.com/linuxppc/linux/issues/83
Signed-off-by: Joel Stanley <joel@jms.id.au>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>

authored by

Joel Stanley and committed by
Michael Ellerman
ed9e84a4 65b9fdad

+5 -14
-9
arch/powerpc/kernel/asm-offsets.c
··· 280 280 /* Interrupt register frame */ 281 281 DEFINE(INT_FRAME_SIZE, STACK_INT_FRAME_SIZE); 282 282 DEFINE(SWITCH_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs)); 283 - #ifdef CONFIG_PPC64 284 - /* Create extra stack space for SRR0 and SRR1 when calling prom/rtas. */ 285 - DEFINE(PROM_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs) + 16); 286 - DEFINE(RTAS_FRAME_SIZE, STACK_FRAME_OVERHEAD + sizeof(struct pt_regs) + 16); 287 - #endif /* CONFIG_PPC64 */ 288 283 STACK_PT_REGS_OFFSET(GPR0, gpr[0]); 289 284 STACK_PT_REGS_OFFSET(GPR1, gpr[1]); 290 285 STACK_PT_REGS_OFFSET(GPR2, gpr[2]); ··· 323 328 STACK_PT_REGS_OFFSET(_ESR, dsisr); 324 329 #else /* CONFIG_PPC64 */ 325 330 STACK_PT_REGS_OFFSET(SOFTE, softe); 326 - 327 - /* These _only_ to be used with {PROM,RTAS}_FRAME_SIZE!!! */ 328 - DEFINE(_SRR0, STACK_FRAME_OVERHEAD+sizeof(struct pt_regs)); 329 - DEFINE(_SRR1, STACK_FRAME_OVERHEAD+sizeof(struct pt_regs)+8); 330 331 #endif /* CONFIG_PPC64 */ 331 332 332 333 #if defined(CONFIG_PPC32)
+5 -5
arch/powerpc/kernel/entry_64.S
··· 1124 1124 _GLOBAL(enter_rtas) 1125 1125 mflr r0 1126 1126 std r0,16(r1) 1127 - stdu r1,-RTAS_FRAME_SIZE(r1) /* Save SP and create stack space. */ 1127 + stdu r1,-SWITCH_FRAME_SIZE(r1) /* Save SP and create stack space. */ 1128 1128 1129 1129 /* Because RTAS is running in 32b mode, it clobbers the high order half 1130 1130 * of all registers that it saves. We therefore save those registers ··· 1256 1256 ld r8,_DSISR(r1) 1257 1257 mtdsisr r8 1258 1258 1259 - addi r1,r1,RTAS_FRAME_SIZE /* Unstack our frame */ 1259 + addi r1,r1,SWITCH_FRAME_SIZE /* Unstack our frame */ 1260 1260 ld r0,16(r1) /* get return address */ 1261 1261 1262 1262 mtlr r0 ··· 1267 1267 _GLOBAL(enter_prom) 1268 1268 mflr r0 1269 1269 std r0,16(r1) 1270 - stdu r1,-PROM_FRAME_SIZE(r1) /* Save SP and create stack space */ 1270 + stdu r1,-SWITCH_FRAME_SIZE(r1) /* Save SP and create stack space */ 1271 1271 1272 1272 /* Because PROM is running in 32b mode, it clobbers the high order half 1273 1273 * of all registers that it saves. We therefore save those registers ··· 1324 1324 REST_10GPRS(22, r1) 1325 1325 ld r4,_CCR(r1) 1326 1326 mtcr r4 1327 - 1328 - addi r1,r1,PROM_FRAME_SIZE 1327 + 1328 + addi r1,r1,SWITCH_FRAME_SIZE 1329 1329 ld r0,16(r1) 1330 1330 mtlr r0 1331 1331 blr