[Skiboot] [PATCH] asm/head: balance branches to avoid link stack predictor mispredicts

Stewart Smith stewart at linux.ibm.com
Wed Apr 17 17:39:46 AEST 2019


Nicholas Piggin <npiggin at gmail.com> writes:
> The Linux wrapper for OPAL call and return is arranged like this:
>
>   __opal_call:
>       mflr   r0
>       std    r0,PPC_STK_LROFF(r1)
>       LOAD_REG_ADDR(r11, opal_return)
>       mtlr   r11
>       hrfid  -> OPAL
>
>   opal_return:
>       ld     r0,PPC_STK_LROFF(r1)
>       mtlr   r0
>       blr
>
> When skiboot returns to Linux, it branches to LR (i.e., opal_return)
> with a blr. This unbalances the link stack predictor and will cause
> mispredicts back up the return stack.

Okay, wow. Also, cool. I'm guessing you spent some time with instruction
traces. Merged to master as of 32a23ae6b0d3549bec7338e439e504db263dc390

I also now feel even worse about the multiple seconds that can be spent
in some OPAL calls in pathalogical cases.
-- 
Stewart Smith
OPAL Architect, IBM.



More information about the Skiboot mailing list