powerpc/64s/interrupt: Check and fix srr_valid without crashing
authorNicholas Piggin <npiggin@gmail.com>
Tue, 22 Jun 2021 12:16:28 +0000 (22:16 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 24 Jun 2021 14:06:57 +0000 (00:06 +1000)
commit6eaaf9de3599865ee3b339d90cb24f2153f40bf4
tree85aaa6964cdec3b750f442d2ebe22b9bd013f4f8
parentae58b1c645895c28ca155843db6788d57ea99e11
powerpc/64s/interrupt: Check and fix srr_valid without crashing

The PPC_RFI_SRR_DEBUG check added by patch "powerpc/64s: avoid reloading
(H)SRR registers if they are still valid" has a few deficiencies. It
does not fix the actual problem, it's not enabled by default, and it
causes a program check interrupt which can cause more difficulties.

However there are a lot of paths which may clobber SRRs or change return
regs, and difficult to have a high confidence that all paths are covered
without wider testing.

Add a relatively low overhead always-enabled check that catches most
such cases, reports once, and fixes it so the kernel can continue.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
[mpe: Rebase, use switch & INT names, squash in race fix from Nick]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/interrupt.c