RISC-V: Workaround for critical mstatus.FS bug
commitb02403363f1056421d120c8e974fdf9c76a84f95
authorMichael Clark <mjc@sifive.com>
Fri, 23 Mar 2018 23:49:07 +0000 (23 16:49 -0700)
committerMichael Clark <mjc@sifive.com>
Thu, 29 Mar 2018 17:22:26 +0000 (29 10:22 -0700)
treecb5dc55e735e4ae28b7949d6bb59c77ceb99e11e
parent47d3b60858d90ac8a0cc3a72af7f95c96781125a
RISC-V: Workaround for critical mstatus.FS bug

This change is a workaround for a bug where mstatus.FS
is not correctly reporting dirty after operations that
modify floating point registers. This a critical bug
or RISC-V in QEMU as it results in floating point
register file corruption when running SMP Linux due to
task migration and possibly uniprocessor Linux if
more than one process is using the FPU.

This workaround will return dirty if mstatus.FS is
switched from off to initial or clean. According to
the specification it is legal for an implementation
to return only off, or dirty.

Cc: Palmer Dabbelt <palmer@sifive.com>
Cc: Sagar Karandikar <sagark@eecs.berkeley.edu>
Cc: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
Cc: Peter Maydell <peter.maydell@linaro.org>
Cc: Alex Bennée <alex.bennee@linaro.org>
Cc: Richard Henderson <richard.henderson@linaro.org>
Cc: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Richard W.M. Jones <rjones@redhat.com>
Signed-off-by: Michael Clark <mjc@sifive.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
target/riscv/op_helper.c