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

powerpc/pseries: Optimise hcall tracepoints

Now that we execute the hcall tracepoint entry and exit code out of
line, we can use the same stack across both functions.

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>

authored by

Anton Blanchard and committed by
Benjamin Herrenschmidt
aaad4224 cc1adb5f

+16 -22
+16 -22
arch/powerpc/platforms/pseries/hvCall.S
··· 46 46 addi r4,r1,STK_PARAM(FIRST_REG); \ 47 47 stdu r1,-STACK_FRAME_OVERHEAD(r1); \ 48 48 bl __trace_hcall_entry; \ 49 - addi r1,r1,STACK_FRAME_OVERHEAD; \ 50 - ld r0,16(r1); \ 51 - ld r3,STK_PARAM(R3)(r1); \ 52 - ld r4,STK_PARAM(R4)(r1); \ 53 - ld r5,STK_PARAM(R5)(r1); \ 54 - ld r6,STK_PARAM(R6)(r1); \ 55 - ld r7,STK_PARAM(R7)(r1); \ 56 - ld r8,STK_PARAM(R8)(r1); \ 57 - ld r9,STK_PARAM(R9)(r1); \ 58 - ld r10,STK_PARAM(R10)(r1); \ 59 - mtlr r0 49 + ld r3,STACK_FRAME_OVERHEAD+STK_PARAM(R3)(r1); \ 50 + ld r4,STACK_FRAME_OVERHEAD+STK_PARAM(R4)(r1); \ 51 + ld r5,STACK_FRAME_OVERHEAD+STK_PARAM(R5)(r1); \ 52 + ld r6,STACK_FRAME_OVERHEAD+STK_PARAM(R6)(r1); \ 53 + ld r7,STACK_FRAME_OVERHEAD+STK_PARAM(R7)(r1); \ 54 + ld r8,STACK_FRAME_OVERHEAD+STK_PARAM(R8)(r1); \ 55 + ld r9,STACK_FRAME_OVERHEAD+STK_PARAM(R9)(r1); \ 56 + ld r10,STACK_FRAME_OVERHEAD+STK_PARAM(R10)(r1) 60 57 61 58 /* 62 59 * postcall is performed immediately before function return which 63 60 * allows liberal use of volatile registers. 64 61 */ 65 62 #define __HCALL_INST_POSTCALL \ 66 - mflr r0; \ 67 - ld r6,STK_PARAM(R3)(r1); \ 68 - std r3,STK_PARAM(R3)(r1); \ 63 + ld r0,STACK_FRAME_OVERHEAD+STK_PARAM(R3)(r1); \ 64 + std r3,STACK_FRAME_OVERHEAD+STK_PARAM(R3)(r1); \ 69 65 mr r4,r3; \ 70 - mr r3,r6; \ 71 - std r0,16(r1); \ 72 - stdu r1,-STACK_FRAME_OVERHEAD(r1); \ 66 + mr r3,r0; \ 73 67 bl __trace_hcall_exit; \ 68 + ld r0,STACK_FRAME_OVERHEAD+16(r1); \ 74 69 addi r1,r1,STACK_FRAME_OVERHEAD; \ 75 - ld r0,16(r1); \ 76 70 ld r3,STK_PARAM(R3)(r1); \ 77 71 mtlr r0 78 72 ··· 273 279 mr r7,r8 274 280 mr r8,r9 275 281 mr r9,r10 276 - ld r10,STK_PARAM(R11)(r1) 277 - ld r11,STK_PARAM(R12)(r1) 278 - ld r12,STK_PARAM(R13)(r1) 282 + ld r10,STACK_FRAME_OVERHEAD+STK_PARAM(R11)(r1) 283 + ld r11,STACK_FRAME_OVERHEAD+STK_PARAM(R12)(r1) 284 + ld r12,STACK_FRAME_OVERHEAD+STK_PARAM(R13)(r1) 279 285 280 286 HVSC 281 287 282 288 mr r0,r12 283 - ld r12,STK_PARAM(R4)(r1) 289 + ld r12,STACK_FRAME_OVERHEAD+STK_PARAM(R4)(r1) 284 290 std r4,0(r12) 285 291 std r5,8(r12) 286 292 std r6,16(r12)