[PATCH v2 2/2] powerpc/perf: Return regs->nip as instruction pointer value when SIAR is 0
Michael Ellerman
mpe at ellerman.id.au
Tue Aug 17 22:49:22 AEST 2021
Christophe Leroy <christophe.leroy at csgroup.eu> writes:
> Le 16/08/2021 à 08:44, kajoljain a écrit :
>> On 8/14/21 6:14 PM, Michael Ellerman wrote:
...
>>>
>>> eg.
>>>
>>> if (use_siar && siar_valid(regs) && siar)
>>> return siar + perf_ip_adjust(regs);
>>> else if (use_siar)
>>> return 0; // no valid instruction pointer
>>> else
>>> return regs->nip;
>>>
>>>
>>> I'm also not sure why we have that return 0 case, I can't think of why
>>> we'd ever want to do that rather than using nip. So maybe we should do
>>> another patch to drop that case.
>>
>> Yeah make sense. I will remove return 0 case in my next version.
>
> This was added by commit
> https://github.com/linuxppc/linux/commit/e6878835ac4794f25385522d29c634b7bbb7cca9
>
> Are we sure it was an error to add it and it can be removed ?
I think so.
That commit added siar_valid(), and updated record_and_restart() to only
record if siar_valid() returned true.
- record = 1;
+ record = siar_valid(regs);
It then also changed perf_instruction_pointer():
- if (use_siar)
+ if (use_siar && siar_valid(regs))
return mfspr(SPRN_SIAR) + perf_ip_adjust(regs);
+ else if (use_siar)
+ return 0; // no valid instruction pointer
else
return regs->nip;
The first change means we would never even call
perf_instruction_pointer() if siar_valid() is false, so we could never
hit the use_siar && !siar_valid() case.
But even so it's always preferable to use regs->nip than 0, even if nip
is somewhat skewed due to interrupts being disabled etc.
cheers
More information about the Linuxppc-dev
mailing list