mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-16 04:04:06 +00:00
powerpc/perf: Fix the check for SIAR value
[ Upstream commit3c69a5f222
] Incase of random sampling, there can be scenarios where Sample Instruction Address Register(SIAR) may not latch to the sampled instruction and could result in the value of 0. In these scenarios it is preferred to return regs->nip. These corner cases are seen in the previous generation (p9) also. Patch adds the check for SIAR value along with regs_use_siar and siar_valid checks so that the function will return regs->nip incase SIAR is zero. Patch drops the code under PPMU_P10_DD1 flag check which handles SIAR 0 case only for Power10 DD1. Fixes:2ca13a4cc5
("powerpc/perf: Use regs->nip when SIAR is zero") Signed-off-by: Kajol Jain <kjain@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20210818171556.36912-3-kjain@linux.ibm.com Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
d05b4290c1
commit
5d2246972e
1 changed files with 2 additions and 10 deletions
|
@ -2251,18 +2251,10 @@ unsigned long perf_misc_flags(struct pt_regs *regs)
|
|||
*/
|
||||
unsigned long perf_instruction_pointer(struct pt_regs *regs)
|
||||
{
|
||||
bool use_siar = regs_use_siar(regs);
|
||||
unsigned long siar = mfspr(SPRN_SIAR);
|
||||
|
||||
if (ppmu && (ppmu->flags & PPMU_P10_DD1)) {
|
||||
if (siar)
|
||||
return siar;
|
||||
else
|
||||
return regs->nip;
|
||||
} else if (use_siar && siar_valid(regs))
|
||||
return mfspr(SPRN_SIAR) + perf_ip_adjust(regs);
|
||||
else if (use_siar)
|
||||
return 0; // no valid instruction pointer
|
||||
if (regs_use_siar(regs) && siar_valid(regs) && siar)
|
||||
return siar + perf_ip_adjust(regs);
|
||||
else
|
||||
return regs->nip;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue