Message ID | 20181008153204.18845-1-david@redhat.com |
---|---|
State | New |
Headers | show |
Series | s390x/tcg: always enable AFP for linux-user | expand |
On 2018-10-08 17:32, David Hildenbrand wrote: > linux-user should always enable AFP, otherwise our emulated binary > might crash once it tries to make use of additional floating-point > registers or instructions. > > Cc: Peter Maydell <peter.maydell@linaro.org> > Cc: Alex Bennée <alex.bennee@linaro.org> > Fixes: db0504154e ("s390x/tcg: check for AFP-register, BFP and DFP data exceptions") > Reported-by: Alex Bennée <alex.bennee@linaro.org> > Signed-off-by: David Hildenbrand <david@redhat.com> > --- > target/s390x/cpu.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c > index 8ed4823d6e..18ba7f85a5 100644 > --- a/target/s390x/cpu.c > +++ b/target/s390x/cpu.c > @@ -145,6 +145,11 @@ static void s390_cpu_full_reset(CPUState *s) > env->cregs[0] = CR0_RESET; > env->cregs[14] = CR14_RESET; > > +#if defined(CONFIG_USER_ONLY) > + /* user mode should always be allowed to use the full FPU */ > + env->cregs[0] |= CR0_AFP; > +#endif > + > /* architectured initial value for Breaking-Event-Address register */ > env->gbea = 1; > > Reviewed-by: Thomas Huth <thuth@redhat.com>
On Mon, 8 Oct 2018 17:32:04 +0200 David Hildenbrand <david@redhat.com> wrote: > linux-user should always enable AFP, otherwise our emulated binary > might crash once it tries to make use of additional floating-point > registers or instructions. > > Cc: Peter Maydell <peter.maydell@linaro.org> > Cc: Alex Bennée <alex.bennee@linaro.org> > Fixes: db0504154e ("s390x/tcg: check for AFP-register, BFP and DFP data exceptions") > Reported-by: Alex Bennée <alex.bennee@linaro.org> > Signed-off-by: David Hildenbrand <david@redhat.com> > --- > target/s390x/cpu.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c > index 8ed4823d6e..18ba7f85a5 100644 > --- a/target/s390x/cpu.c > +++ b/target/s390x/cpu.c > @@ -145,6 +145,11 @@ static void s390_cpu_full_reset(CPUState *s) > env->cregs[0] = CR0_RESET; > env->cregs[14] = CR14_RESET; > > +#if defined(CONFIG_USER_ONLY) > + /* user mode should always be allowed to use the full FPU */ > + env->cregs[0] |= CR0_AFP; > +#endif > + > /* architectured initial value for Breaking-Event-Address register */ > env->gbea = 1; > I've reproduced the crash via make check-tcg, and this patch fixes it. Thanks, applied.
On 10/8/18 8:32 AM, David Hildenbrand wrote: > linux-user should always enable AFP, otherwise our emulated binary > might crash once it tries to make use of additional floating-point > registers or instructions. > > Cc: Peter Maydell <peter.maydell@linaro.org> > Cc: Alex Bennée <alex.bennee@linaro.org> > Fixes: db0504154e ("s390x/tcg: check for AFP-register, BFP and DFP data exceptions") > Reported-by: Alex Bennée <alex.bennee@linaro.org> > Signed-off-by: David Hildenbrand <david@redhat.com> > --- > target/s390x/cpu.c | 5 +++++ > 1 file changed, 5 insertions(+) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
David Hildenbrand <david@redhat.com> writes: > linux-user should always enable AFP, otherwise our emulated binary > might crash once it tries to make use of additional floating-point > registers or instructions. > > Cc: Peter Maydell <peter.maydell@linaro.org> > Cc: Alex Bennée <alex.bennee@linaro.org> > Fixes: db0504154e ("s390x/tcg: check for AFP-register, BFP and DFP data exceptions") > Reported-by: Alex Bennée <alex.bennee@linaro.org> > Signed-off-by: David Hildenbrand <david@redhat.com> > --- > target/s390x/cpu.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c > index 8ed4823d6e..18ba7f85a5 100644 > --- a/target/s390x/cpu.c > +++ b/target/s390x/cpu.c > @@ -145,6 +145,11 @@ static void s390_cpu_full_reset(CPUState *s) > env->cregs[0] = CR0_RESET; > env->cregs[14] = CR14_RESET; > > +#if defined(CONFIG_USER_ONLY) > + /* user mode should always be allowed to use the full FPU */ > + env->cregs[0] |= CR0_AFP; > +#endif > + Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Tested-by: Alex Bennée <alex.bennee@linaro.org> > /* architectured initial value for Breaking-Event-Address register */ > env->gbea = 1; -- Alex Bennée
On Mon, 8 Oct 2018 17:32:04 +0200 David Hildenbrand <david@redhat.com> wrote: > linux-user should always enable AFP, otherwise our emulated binary > might crash once it tries to make use of additional floating-point > registers or instructions. > > Cc: Peter Maydell <peter.maydell@linaro.org> > Cc: Alex Bennée <alex.bennee@linaro.org> > Fixes: db0504154e ("s390x/tcg: check for AFP-register, BFP and DFP data exceptions") > Reported-by: Alex Bennée <alex.bennee@linaro.org> > Signed-off-by: David Hildenbrand <david@redhat.com> > --- > target/s390x/cpu.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c > index 8ed4823d6e..18ba7f85a5 100644 > --- a/target/s390x/cpu.c > +++ b/target/s390x/cpu.c > @@ -145,6 +145,11 @@ static void s390_cpu_full_reset(CPUState *s) > env->cregs[0] = CR0_RESET; > env->cregs[14] = CR14_RESET; > > +#if defined(CONFIG_USER_ONLY) > + /* user mode should always be allowed to use the full FPU */ > + env->cregs[0] |= CR0_AFP; > +#endif > + > /* architectured initial value for Breaking-Event-Address register */ > env->gbea = 1; > In case this is applied directly: Reviewed-by: Cornelia Huck <cohuck@redhat.com> Tested-by: Cornelia Huck <cohuck@redhat.com>
On 8 October 2018 at 17:16, Cornelia Huck <cohuck@redhat.com> wrote: > On Mon, 8 Oct 2018 17:32:04 +0200 > David Hildenbrand <david@redhat.com> wrote: > >> linux-user should always enable AFP, otherwise our emulated binary >> might crash once it tries to make use of additional floating-point >> registers or instructions. >> >> Cc: Peter Maydell <peter.maydell@linaro.org> >> Cc: Alex Bennée <alex.bennee@linaro.org> >> Fixes: db0504154e ("s390x/tcg: check for AFP-register, BFP and DFP data exceptions") >> Reported-by: Alex Bennée <alex.bennee@linaro.org> >> Signed-off-by: David Hildenbrand <david@redhat.com> >> --- >> target/s390x/cpu.c | 5 +++++ >> 1 file changed, 5 insertions(+) >> >> diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c >> index 8ed4823d6e..18ba7f85a5 100644 >> --- a/target/s390x/cpu.c >> +++ b/target/s390x/cpu.c >> @@ -145,6 +145,11 @@ static void s390_cpu_full_reset(CPUState *s) >> env->cregs[0] = CR0_RESET; >> env->cregs[14] = CR14_RESET; >> >> +#if defined(CONFIG_USER_ONLY) >> + /* user mode should always be allowed to use the full FPU */ >> + env->cregs[0] |= CR0_AFP; >> +#endif >> + >> /* architectured initial value for Breaking-Event-Address register */ >> env->gbea = 1; >> > > In case this is applied directly: > > Reviewed-by: Cornelia Huck <cohuck@redhat.com> > Tested-by: Cornelia Huck <cohuck@redhat.com> Thanks; I've applied it to master, and also added 'make check-tcg' to my set of things I run as part of a merge, which should catch this kind of bug in future. -- PMM
diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c index 8ed4823d6e..18ba7f85a5 100644 --- a/target/s390x/cpu.c +++ b/target/s390x/cpu.c @@ -145,6 +145,11 @@ static void s390_cpu_full_reset(CPUState *s) env->cregs[0] = CR0_RESET; env->cregs[14] = CR14_RESET; +#if defined(CONFIG_USER_ONLY) + /* user mode should always be allowed to use the full FPU */ + env->cregs[0] |= CR0_AFP; +#endif + /* architectured initial value for Breaking-Event-Address register */ env->gbea = 1;
linux-user should always enable AFP, otherwise our emulated binary might crash once it tries to make use of additional floating-point registers or instructions. Cc: Peter Maydell <peter.maydell@linaro.org> Cc: Alex Bennée <alex.bennee@linaro.org> Fixes: db0504154e ("s390x/tcg: check for AFP-register, BFP and DFP data exceptions") Reported-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: David Hildenbrand <david@redhat.com> --- target/s390x/cpu.c | 5 +++++ 1 file changed, 5 insertions(+)