* [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12
@ 2018-03-29 17:26 Michael Clark
2018-03-29 17:26 ` [Qemu-devel] [PULL 1/1] RISC-V: Workaround for critical mstatus.FS bug Michael Clark
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Michael Clark @ 2018-03-29 17:26 UTC (permalink / raw)
To: qemu-devel, Peter Maydell; +Cc: patches, Michael Clark
The following changes since commit 47d3b60858d90ac8a0cc3a72af7f95c96781125a:
Merge remote-tracking branch 'remotes/riscv/tags/riscv-qemu-2.12-important-fixes' into staging (2018-03-28 22:13:38 +0100)
are available in the git repository at:
https://github.com/riscv/riscv-qemu.git tags/riscv-qemu-2.12-critical-fixes
for you to fetch changes up to b02403363f1056421d120c8e974fdf9c76a84f95:
RISC-V: Workaround for critical mstatus.FS bug (2018-03-29 10:22:26 -0700)
----------------------------------------------------------------
RISC-V: Critical fixes for QEMU 2.12
This series includes changes that are considered release critical,
such as floating point register file corruption under SMP Linux
due to incorrect handling of mstatus.FS.
This workaround will be replaced with a more comprehensive fix
for mstatus.FS handling in QEMU 2.13.
----------------------------------------------------------------
Michael Clark (1):
RISC-V: Workaround for critical mstatus.FS bug
target/riscv/op_helper.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Qemu-devel] [PULL 1/1] RISC-V: Workaround for critical mstatus.FS bug
2018-03-29 17:26 [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12 Michael Clark
@ 2018-03-29 17:26 ` Michael Clark
2018-03-30 17:08 ` [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12 Michael Clark
` (2 subsequent siblings)
3 siblings, 0 replies; 8+ messages in thread
From: Michael Clark @ 2018-03-29 17:26 UTC (permalink / raw)
To: qemu-devel
Cc: patches, Michael Clark, Palmer Dabbelt, Sagar Karandikar,
Bastian Koppelmann, Peter Maydell, Alex Bennée,
Richard Henderson, Philippe Mathieu-Daudé
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 | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c
index e34715d..7c6068b 100644
--- a/target/riscv/op_helper.c
+++ b/target/riscv/op_helper.c
@@ -144,8 +144,21 @@ void csr_write_helper(CPURISCVState *env, target_ulong val_to_write,
}
mstatus = (mstatus & ~mask) | (val_to_write & mask);
- int dirty = (mstatus & MSTATUS_FS) == MSTATUS_FS;
- dirty |= (mstatus & MSTATUS_XS) == MSTATUS_XS;
+
+ /* Note: this is a workaround for an issue where mstatus.FS
+ does not report dirty after floating point operations
+ that modify floating point state. This workaround is
+ technically compliant with the RISC-V Privileged
+ specification as it is legal to return only off, or dirty.
+ at the expense of extra floating point save/restore. */
+
+ /* FP is always dirty or off */
+ if (mstatus & MSTATUS_FS) {
+ mstatus |= MSTATUS_FS;
+ }
+
+ int dirty = ((mstatus & MSTATUS_FS) == MSTATUS_FS) |
+ ((mstatus & MSTATUS_XS) == MSTATUS_XS);
mstatus = set_field(mstatus, MSTATUS_SD, dirty);
env->mstatus = mstatus;
break;
--
2.7.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12
2018-03-29 17:26 [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12 Michael Clark
2018-03-29 17:26 ` [Qemu-devel] [PULL 1/1] RISC-V: Workaround for critical mstatus.FS bug Michael Clark
@ 2018-03-30 17:08 ` Michael Clark
2018-04-01 18:49 ` Richard W.M. Jones
2018-03-31 6:35 ` no-reply
2018-04-03 14:58 ` Peter Maydell
3 siblings, 1 reply; 8+ messages in thread
From: Michael Clark @ 2018-03-30 17:08 UTC (permalink / raw)
To: Peter Maydell, Richard Henderson, Richard W.M. Jones
Cc: QEMU Developers, RISC-V Patches, Michael Clark
Hi Peter,
I had tested Richard's proper fix but we didn't have a PR or the required
Reviewed-by and Signed-off-by so I made the PR for the conservative fix,
assuming we can test Richard's more correct fix and include it in the QEMU
2.13 timeframe. I've tested Richard's fix with the simple scheduling test
case, so if he makes a PR, I'm happy for that to be included versus this
workaround. The workaround is, of course, the most conservative fix as it
will always cause FP state to be saved, assuming we missed a case in
Richard's patch.
I'll leave it up to you and Richard, but please include either this
workaround or Richard's slightly larger change in QEMU 2.12, if possible.
In any case, I believe vendors have patches they can include in their
packages... but it would be nice that upstream QEMU 2.12 has working FP for
RISC-V with SMP Linux.
Thanks,
Michael.
On Thu, Mar 29, 2018 at 10:26 AM, Michael Clark <mjc@sifive.com> wrote:
> The following changes since commit 47d3b60858d90ac8a0cc3a72af7f95
> c96781125a:
>
> Merge remote-tracking branch 'remotes/riscv/tags/riscv-qemu-2.12-important-fixes'
> into staging (2018-03-28 22:13:38 +0100)
>
> are available in the git repository at:
>
> https://github.com/riscv/riscv-qemu.git tags/riscv-qemu-2.12-critical-
> fixes
>
> for you to fetch changes up to b02403363f1056421d120c8e974fdf9c76a84f95:
>
> RISC-V: Workaround for critical mstatus.FS bug (2018-03-29 10:22:26
> -0700)
>
> ----------------------------------------------------------------
> RISC-V: Critical fixes for QEMU 2.12
>
> This series includes changes that are considered release critical,
> such as floating point register file corruption under SMP Linux
> due to incorrect handling of mstatus.FS.
>
> This workaround will be replaced with a more comprehensive fix
> for mstatus.FS handling in QEMU 2.13.
>
> ----------------------------------------------------------------
> Michael Clark (1):
> RISC-V: Workaround for critical mstatus.FS bug
>
> target/riscv/op_helper.c | 17 +++++++++++++++--
> 1 file changed, 15 insertions(+), 2 deletions(-)
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12
2018-03-29 17:26 [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12 Michael Clark
2018-03-29 17:26 ` [Qemu-devel] [PULL 1/1] RISC-V: Workaround for critical mstatus.FS bug Michael Clark
2018-03-30 17:08 ` [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12 Michael Clark
@ 2018-03-31 6:35 ` no-reply
2018-04-03 14:58 ` Peter Maydell
3 siblings, 0 replies; 8+ messages in thread
From: no-reply @ 2018-03-31 6:35 UTC (permalink / raw)
To: mjc; +Cc: famz, qemu-devel, peter.maydell, patches
Hi,
This series failed docker-mingw@fedora build test. Please find the testing commands and
their output below. If you have Docker installed, you can probably reproduce it
locally.
Type: series
Message-id: 1522344417-60114-1-git-send-email-mjc@sifive.com
Subject: [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12
=== TEST SCRIPT BEGIN ===
#!/bin/bash
set -e
git submodule update --init dtc
# Let docker tests dump environment info
export SHOW_ENV=1
export J=8
time make docker-test-mingw@fedora
=== TEST SCRIPT END ===
Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
Switched to a new branch 'test'
237fb031f4 RISC-V: Workaround for critical mstatus.FS bug
=== OUTPUT BEGIN ===
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Cloning into '/var/tmp/patchew-tester-tmp-ysxzxo5z/src/dtc'...
Submodule path 'dtc': checked out 'e54388015af1fb4bf04d0bca99caba1074d9cc42'
BUILD fedora
make[1]: Entering directory '/var/tmp/patchew-tester-tmp-ysxzxo5z/src'
GEN /var/tmp/patchew-tester-tmp-ysxzxo5z/src/docker-src.2018-03-31-02.33.56.26135/qemu.tar
Cloning into '/var/tmp/patchew-tester-tmp-ysxzxo5z/src/docker-src.2018-03-31-02.33.56.26135/qemu.tar.vroot'...
done.
Checking out files: 25% (1548/6066)
Checking out files: 26% (1578/6066)
Checking out files: 27% (1638/6066)
Checking out files: 28% (1699/6066)
Checking out files: 29% (1760/6066)
Checking out files: 30% (1820/6066)
Checking out files: 31% (1881/6066)
Checking out files: 32% (1942/6066)
Checking out files: 33% (2002/6066)
Checking out files: 34% (2063/6066)
Checking out files: 35% (2124/6066)
Checking out files: 36% (2184/6066)
Checking out files: 37% (2245/6066)
Checking out files: 38% (2306/6066)
Checking out files: 39% (2366/6066)
Checking out files: 40% (2427/6066)
Checking out files: 41% (2488/6066)
Checking out files: 42% (2548/6066)
Checking out files: 43% (2609/6066)
Checking out files: 44% (2670/6066)
Checking out files: 45% (2730/6066)
Checking out files: 46% (2791/6066)
Checking out files: 47% (2852/6066)
Checking out files: 48% (2912/6066)
Checking out files: 49% (2973/6066)
Checking out files: 50% (3033/6066)
Checking out files: 51% (3094/6066)
Checking out files: 52% (3155/6066)
Checking out files: 53% (3215/6066)
Checking out files: 54% (3276/6066)
Checking out files: 55% (3337/6066)
Checking out files: 56% (3397/6066)
Checking out files: 57% (3458/6066)
Checking out files: 58% (3519/6066)
Checking out files: 59% (3579/6066)
Checking out files: 60% (3640/6066)
Checking out files: 61% (3701/6066)
Checking out files: 62% (3761/6066)
Checking out files: 63% (3822/6066)
Checking out files: 64% (3883/6066)
Checking out files: 65% (3943/6066)
Checking out files: 66% (4004/6066)
Checking out files: 67% (4065/6066)
Checking out files: 68% (4125/6066)
Checking out files: 69% (4186/6066)
Checking out files: 70% (4247/6066)
Checking out files: 71% (4307/6066)
Checking out files: 72% (4368/6066)
Checking out files: 73% (4429/6066)
Checking out files: 74% (4489/6066)
Checking out files: 75% (4550/6066)
Checking out files: 76% (4611/6066)
Checking out files: 77% (4671/6066)
Checking out files: 78% (4732/6066)
Checking out files: 79% (4793/6066)
Checking out files: 80% (4853/6066)
Checking out files: 81% (4914/6066)
Checking out files: 82% (4975/6066)
Checking out files: 83% (5035/6066)
Checking out files: 84% (5096/6066)
Checking out files: 85% (5157/6066)
Checking out files: 86% (5217/6066)
Checking out files: 87% (5278/6066)
Checking out files: 88% (5339/6066)
Checking out files: 89% (5399/6066)
Checking out files: 90% (5460/6066)
Checking out files: 91% (5521/6066)
Checking out files: 92% (5581/6066)
Checking out files: 93% (5642/6066)
Checking out files: 93% (5655/6066)
Checking out files: 93% (5690/6066)
Checking out files: 94% (5703/6066)
Checking out files: 95% (5763/6066)
Checking out files: 96% (5824/6066)
Checking out files: 97% (5885/6066)
Checking out files: 98% (5945/6066)
Checking out files: 99% (6006/6066)
Checking out files: 100% (6066/6066)
Checking out files: 100% (6066/6066), done.
Your branch is up-to-date with 'origin/test'.
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Cloning into '/var/tmp/patchew-tester-tmp-ysxzxo5z/src/docker-src.2018-03-31-02.33.56.26135/qemu.tar.vroot/dtc'...
Submodule path 'dtc': checked out 'e54388015af1fb4bf04d0bca99caba1074d9cc42'
Submodule 'ui/keycodemapdb' (git://git.qemu.org/keycodemapdb.git) registered for path 'ui/keycodemapdb'
Cloning into '/var/tmp/patchew-tester-tmp-ysxzxo5z/src/docker-src.2018-03-31-02.33.56.26135/qemu.tar.vroot/ui/keycodemapdb'...
Submodule path 'ui/keycodemapdb': checked out '6b3d716e2b6472eb7189d3220552280ef3d832ce'
tar: /var/tmp/patchew-tester-tmp-ysxzxo5z/src/docker-src.2018-03-31-02.33.56.26135/qemu.tar: Wrote only 2048 of 10240 bytes
tar: Error is not recoverable: exiting now
failed to create tar file
COPY RUNNER
RUN test-mingw in qemu:fedora
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
/var/tmp/qemu/run: line 32: prep_fail: command not found
Packages installed:
PyYAML-3.12-5.fc27.x86_64
SDL-devel-1.2.15-29.fc27.x86_64
bc-1.07.1-3.fc27.x86_64
bison-3.0.4-8.fc27.x86_64
bzip2-1.0.6-24.fc27.x86_64
ccache-3.3.6-1.fc27.x86_64
clang-5.0.1-3.fc27.x86_64
findutils-4.6.0-16.fc27.x86_64
flex-2.6.1-5.fc27.x86_64
gcc-7.3.1-5.fc27.x86_64
gcc-c++-7.3.1-5.fc27.x86_64
gettext-0.19.8.1-12.fc27.x86_64
git-2.14.3-3.fc27.x86_64
glib2-devel-2.54.3-2.fc27.x86_64
hostname-3.18-4.fc27.x86_64
libaio-devel-0.3.110-9.fc27.x86_64
libasan-7.3.1-5.fc27.x86_64
libfdt-devel-1.4.6-1.fc27.x86_64
libubsan-7.3.1-5.fc27.x86_64
llvm-5.0.1-3.fc27.x86_64
make-4.2.1-4.fc27.x86_64
mingw32-SDL-1.2.15-9.fc27.noarch
mingw32-bzip2-1.0.6-9.fc27.noarch
mingw32-curl-7.54.1-2.fc27.noarch
mingw32-glib2-2.54.1-1.fc27.noarch
mingw32-gmp-6.1.2-2.fc27.noarch
mingw32-gnutls-3.5.13-2.fc27.noarch
mingw32-gtk2-2.24.31-4.fc27.noarch
mingw32-gtk3-3.22.16-1.fc27.noarch
mingw32-libjpeg-turbo-1.5.1-3.fc27.noarch
mingw32-libpng-1.6.29-2.fc27.noarch
mingw32-libssh2-1.8.0-3.fc27.noarch
mingw32-libtasn1-4.13-1.fc27.noarch
mingw32-nettle-3.3-3.fc27.noarch
mingw32-pixman-0.34.0-3.fc27.noarch
mingw32-pkg-config-0.28-9.fc27.x86_64
mingw64-SDL-1.2.15-9.fc27.noarch
mingw64-bzip2-1.0.6-9.fc27.noarch
mingw64-curl-7.54.1-2.fc27.noarch
mingw64-glib2-2.54.1-1.fc27.noarch
mingw64-gmp-6.1.2-2.fc27.noarch
mingw64-gnutls-3.5.13-2.fc27.noarch
mingw64-gtk2-2.24.31-4.fc27.noarch
mingw64-gtk3-3.22.16-1.fc27.noarch
mingw64-libjpeg-turbo-1.5.1-3.fc27.noarch
mingw64-libpng-1.6.29-2.fc27.noarch
mingw64-libssh2-1.8.0-3.fc27.noarch
mingw64-libtasn1-4.13-1.fc27.noarch
mingw64-nettle-3.3-3.fc27.noarch
mingw64-pixman-0.34.0-3.fc27.noarch
mingw64-pkg-config-0.28-9.fc27.x86_64
nettle-devel-3.4-1.fc27.x86_64
perl-5.26.1-403.fc27.x86_64
pixman-devel-0.34.0-4.fc27.x86_64
python3-3.6.2-13.fc27.x86_64
sparse-0.5.1-2.fc27.x86_64
tar-1.29-7.fc27.x86_64
which-2.21-4.fc27.x86_64
zlib-devel-1.2.11-4.fc27.x86_64
Environment variables:
TARGET_LIST=
PACKAGES=ccache gettext git tar PyYAML sparse flex bison python3 bzip2 hostname glib2-devel pixman-devel zlib-devel SDL-devel libfdt-devel gcc gcc-c++ llvm clang make perl which bc findutils libaio-devel nettle-devel libasan libubsan mingw32-pixman mingw32-glib2 mingw32-gmp mingw32-SDL mingw32-pkg-config mingw32-gtk2 mingw32-gtk3 mingw32-gnutls mingw32-nettle mingw32-libtasn1 mingw32-libjpeg-turbo mingw32-libpng mingw32-curl mingw32-libssh2 mingw32-bzip2 mingw64-pixman mingw64-glib2 mingw64-gmp mingw64-SDL mingw64-pkg-config mingw64-gtk2 mingw64-gtk3 mingw64-gnutls mingw64-nettle mingw64-libtasn1 mingw64-libjpeg-turbo mingw64-libpng mingw64-curl mingw64-libssh2 mingw64-bzip2
J=8
V=
HOSTNAME=1cc388470a43
DEBUG=
SHOW_ENV=1
PWD=/
HOME=/root
CCACHE_DIR=/var/tmp/ccache
DISTTAG=f27container
QEMU_CONFIGURE_OPTS=--python=/usr/bin/python3
FGC=f27
TEST_DIR=/tmp/qemu-test
SHLVL=1
FEATURES=mingw clang pyyaml asan dtc
PATH=/usr/lib/ccache:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAKEFLAGS= -j8
EXTRA_CONFIGURE_OPTS=
_=/usr/bin/env
Configure options:
--enable-werror --target-list=x86_64-softmmu,aarch64-softmmu --prefix=/tmp/qemu-test/install --python=/usr/bin/python3 --cross-prefix=x86_64-w64-mingw32- --enable-trace-backends=simple --enable-gnutls --enable-nettle --enable-curl --enable-vnc --enable-bzip2 --enable-guest-agent --with-sdlabi=1.2 --with-gtkabi=2.0
ERROR: DTC (libfdt) version >= 1.4.2 not present.
Please install the DTC (libfdt) devel package
Traceback (most recent call last):
File "./tests/docker/docker.py", line 407, in <module>
sys.exit(main())
File "./tests/docker/docker.py", line 404, in main
return args.cmdobj.run(args, argv)
File "./tests/docker/docker.py", line 261, in run
return Docker().run(argv, args.keep, quiet=args.quiet)
File "./tests/docker/docker.py", line 229, in run
quiet=quiet)
File "./tests/docker/docker.py", line 147, in _do_check
return subprocess.check_call(self._command + cmd, **kwargs)
File "/usr/lib64/python2.7/subprocess.py", line 186, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['docker', 'run', '--label', 'com.qemu.instance.uuid=8ca43b3634ad11e8a04c52540069c830', '-u', '0', '--security-opt', 'seccomp=unconfined', '--rm', '--net=none', '-e', 'TARGET_LIST=', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=8', '-e', 'DEBUG=', '-e', 'SHOW_ENV=1', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/root/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-ysxzxo5z/src/docker-src.2018-03-31-02.33.56.26135:/var/tmp/qemu:z,ro', 'qemu:fedora', '/var/tmp/qemu/run', 'test-mingw']' returned non-zero exit status 1
make[1]: *** [tests/docker/Makefile.include:129: docker-run] Error 1
make[1]: Leaving directory '/var/tmp/patchew-tester-tmp-ysxzxo5z/src'
make: *** [tests/docker/Makefile.include:163: docker-run-test-mingw@fedora] Error 2
real 1m12.482s
user 0m9.279s
sys 0m6.951s
=== OUTPUT END ===
Test command exited with code: 2
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12
2018-03-30 17:08 ` [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12 Michael Clark
@ 2018-04-01 18:49 ` Richard W.M. Jones
2018-04-03 2:43 ` Michael Clark
0 siblings, 1 reply; 8+ messages in thread
From: Richard W.M. Jones @ 2018-04-01 18:49 UTC (permalink / raw)
To: Michael Clark
Cc: Peter Maydell, Richard Henderson, QEMU Developers, RISC-V Patches
On Fri, Mar 30, 2018 at 10:08:23AM -0700, Michael Clark wrote:
> Hi Peter,
>
> I had tested Richard's proper fix but we didn't have a PR or the required
> Reviewed-by and Signed-off-by so I made the PR for the conservative fix,
"Richard" is me or Richard Henderson? Anyway if you meant Stefan
O'Rear's fix (https://github.com/rwmjones/fedora-riscv-bootstrap/blob/master/stage1-riscv-qemu/force-float-save.patch)
then it is my understanding that this is also just a workaround.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-p2v converts physical machines to virtual machines. Boot with a
live CD or over the network (PXE) and turn machines into KVM guests.
http://libguestfs.org/virt-v2v
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12
2018-04-01 18:49 ` Richard W.M. Jones
@ 2018-04-03 2:43 ` Michael Clark
2018-04-03 14:50 ` Peter Maydell
0 siblings, 1 reply; 8+ messages in thread
From: Michael Clark @ 2018-04-03 2:43 UTC (permalink / raw)
To: Richard W.M. Jones
Cc: Peter Maydell, Richard Henderson, QEMU Developers, RISC-V Patches
On Sun, Apr 1, 2018 at 11:49 AM, Richard W.M. Jones <rjones@redhat.com>
wrote:
> On Fri, Mar 30, 2018 at 10:08:23AM -0700, Michael Clark wrote:
> > Hi Peter,
> >
> > I had tested Richard's proper fix but we didn't have a PR or the required
> > Reviewed-by and Signed-off-by so I made the PR for the conservative fix,
>
> "Richard" is me or Richard Henderson? Anyway if you meant Stefan
> O'Rear's fix (https://github.com/rwmjones/fedora-riscv-bootstrap/blob/
> master/stage1-riscv-qemu/force-float-save.patch)
> then it is my understanding that this is also just a workaround.
Apologies for not being precise. Richard Henderson has a comprehensive fix
that correctly marks mstatus.FS dirty inside of FP arithmetic and FP loads.
This logic is missing in the current QEMU, hence the bug. i.e. QEMU
currently only has logic to throw exceptions if mstatus.FS state is set of
off, but FP arithmetic and FP loads do not cause state change to dirty.
I submitted the pull request for your's/Stefan's workaround so that QEMU
2.12 has working FP context switching under Linux (always returning dirty
or off is valid implementation choice according to the specification),
given Richard Henderson had not made a PR for his more comprehensive fix,
with the rationale that we could implement the comprehensive fix for QEMU
2.13.
At this point, I think neither of the fixes have gone in due to timing i.e.
the Easter Holidays, so vendors will need either your's/Stefan's workaround
or Richard Henderson's 2 patch series which he sent to the mailing list.
- https://lists.nongnu.org/archive/html/qemu-devel/2018-03/msg07034.html
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12
2018-04-03 2:43 ` Michael Clark
@ 2018-04-03 14:50 ` Peter Maydell
0 siblings, 0 replies; 8+ messages in thread
From: Peter Maydell @ 2018-04-03 14:50 UTC (permalink / raw)
To: Michael Clark
Cc: Richard W.M. Jones, Richard Henderson, QEMU Developers,
RISC-V Patches
On 3 April 2018 at 03:43, Michael Clark <mjc@sifive.com> wrote:
> I submitted the pull request for your's/Stefan's workaround so that QEMU
> 2.12 has working FP context switching under Linux (always returning dirty or
> off is valid implementation choice according to the specification), given
> Richard Henderson had not made a PR for his more comprehensive fix, with the
> rationale that we could implement the comprehensive fix for QEMU 2.13
Given that riscv is your area as submaintainer I (and likely also
RTH) would expect RTH's patch to go in via a pull request from you,
not one directly from him. One of the things the submaintainer does
is evaluate what the right set of patches to go in for the area are,
if there are multiple proposed ways to fix something.
thanks
-- PMM
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12
2018-03-29 17:26 [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12 Michael Clark
` (2 preceding siblings ...)
2018-03-31 6:35 ` no-reply
@ 2018-04-03 14:58 ` Peter Maydell
3 siblings, 0 replies; 8+ messages in thread
From: Peter Maydell @ 2018-04-03 14:58 UTC (permalink / raw)
To: Michael Clark; +Cc: QEMU Developers, RISC-V Patches
On 29 March 2018 at 18:26, Michael Clark <mjc@sifive.com> wrote:
> The following changes since commit 47d3b60858d90ac8a0cc3a72af7f95c96781125a:
>
> Merge remote-tracking branch 'remotes/riscv/tags/riscv-qemu-2.12-important-fixes' into staging (2018-03-28 22:13:38 +0100)
>
> are available in the git repository at:
>
> https://github.com/riscv/riscv-qemu.git tags/riscv-qemu-2.12-critical-fixes
>
> for you to fetch changes up to b02403363f1056421d120c8e974fdf9c76a84f95:
>
> RISC-V: Workaround for critical mstatus.FS bug (2018-03-29 10:22:26 -0700)
>
> ----------------------------------------------------------------
> RISC-V: Critical fixes for QEMU 2.12
>
> This series includes changes that are considered release critical,
> such as floating point register file corruption under SMP Linux
> due to incorrect handling of mstatus.FS.
>
> This workaround will be replaced with a more comprehensive fix
> for mstatus.FS handling in QEMU 2.13.
>
> ----------------------------------------------------------------
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2018-04-03 14:58 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-29 17:26 [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12 Michael Clark
2018-03-29 17:26 ` [Qemu-devel] [PULL 1/1] RISC-V: Workaround for critical mstatus.FS bug Michael Clark
2018-03-30 17:08 ` [Qemu-devel] [PULL 0/1] RISC-V: Critical fixes for QEMU 2.12 Michael Clark
2018-04-01 18:49 ` Richard W.M. Jones
2018-04-03 2:43 ` Michael Clark
2018-04-03 14:50 ` Peter Maydell
2018-03-31 6:35 ` no-reply
2018-04-03 14:58 ` Peter Maydell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).