APPLIED[artful]: [PATCH] [Zesty] powerpc/tm: Fix FP and VMX register corruption
Seth Forshee
seth.forshee at canonical.com
Wed May 24 12:41:35 UTC 2017
On Wed, May 17, 2017 at 11:19:39AM -0300, Breno Leitao wrote:
> From: Michael Neuling <mikey at neuling.org>
>
> BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1691477
>
> In commit dc3106690b20 ("powerpc: tm: Always use fp_state and vr_state
> to store live registers"), a section of code was removed that copied
> the current state to checkpointed state. That code should not have been
> removed.
>
> When an FP (Floating Point) unavailable is taken inside a transaction,
> we need to abort the transaction. This is because at the time of the
> tbegin, the FP state is bogus so the state stored in the checkpointed
> registers is incorrect. To fix this, we treclaim (to get the
> checkpointed GPRs) and then copy the thread_struct FP live state into
> the checkpointed state. We then trecheckpoint so that the FP state is
> correctly restored into the CPU.
>
> The copying of the FP registers from live to checkpointed is what was
> missing.
>
> This simplifies the logic slightly from the original patch.
> tm_reclaim_thread() will now always write the checkpointed FP
> state. Either the checkpointed FP state will be written as part of
> the actual treclaim (in tm.S), or it'll be a copy of the live
> state. Which one we use is based on MSR[FP] from userspace.
>
> Similarly for VMX.
>
> Fixes: dc3106690b20 ("powerpc: tm: Always use fp_state and vr_state to store live registers")
> Cc: stable at vger.kernel.org # 4.9+
> Signed-off-by: Michael Neuling <mikey at neuling.org>
> Reviewed-by: cyrilbur at gmail.com
> Signed-off-by: Michael Ellerman <mpe at ellerman.id.au>
> (cherry picked from commit f48e91e87e67b56bef63393d1a02c6e22c1d7078)
> Signed-off-by: Breno Leitao <breno.leitao at gmail.com>
Applied to artful/master-next.
More information about the kernel-team
mailing list