aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/powerpc
diff options
context:
space:
mode:
authorMichael Neuling <mikey@neuling.org>2017-05-08 17:16:26 +1000
committerMichael Ellerman <mpe@ellerman.id.au>2017-05-15 19:31:38 +1000
commitf48e91e87e67b56bef63393d1a02c6e22c1d7078 (patch)
tree15b1039104618f970172dccf1af43f042eb38989 /tools/testing/selftests/powerpc
parentpowerpc/modules: If mprofile-kernel is enabled add it to vermagic (diff)
downloadlinux-dev-f48e91e87e67b56bef63393d1a02c6e22c1d7078.tar.xz
linux-dev-f48e91e87e67b56bef63393d1a02c6e22c1d7078.zip
powerpc/tm: Fix FP and VMX register corruption
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@vger.kernel.org # 4.9+ Signed-off-by: Michael Neuling <mikey@neuling.org> Reviewed-by: cyrilbur@gmail.com Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'tools/testing/selftests/powerpc')
0 files changed, 0 insertions, 0 deletions