Message ID | 20240722172957.1041231-5-peter.maydell@linaro.org |
---|---|
State | New |
Headers | show |
Series | target/arm: Various minor SME bugfixes | expand |
On 22/7/24 19:29, Peter Maydell wrote: > When determining the current vector length, the SMCR_EL2.LEN and > SVCR_EL2.LEN settings should only be considered if EL2 is enabled > (compare the pseudocode CurrentSVL and CurrentNSVL which call > EL2Enabled()). > > We were checking against ARM_FEATURE_EL2 rather than calling > arm_is_el2_enabled(), which meant that we would look at > SMCR_EL2/SVCR_EL2 when in Secure EL1 or Secure EL0 even if Secure EL2 > was not enabled. Just curious, how did you notice? > Use the correct check in sve_vqm1_for_el_sm(). > > Cc: qemu-stable@nongnu.org > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > target/arm/helper.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/target/arm/helper.c b/target/arm/helper.c > index ce319572354..8fb4b474e83 100644 > --- a/target/arm/helper.c > +++ b/target/arm/helper.c > @@ -7232,7 +7232,7 @@ uint32_t sve_vqm1_for_el_sm(CPUARMState *env, int el, bool sm) > if (el <= 1 && !el_is_in_host(env, el)) { > len = MIN(len, 0xf & (uint32_t)cr[1]); > } > - if (el <= 2 && arm_feature(env, ARM_FEATURE_EL2)) { > + if (el <= 2 && arm_is_el2_enabled(env)) { > len = MIN(len, 0xf & (uint32_t)cr[2]); > } > if (arm_feature(env, ARM_FEATURE_EL3)) {
diff --git a/target/arm/helper.c b/target/arm/helper.c index ce319572354..8fb4b474e83 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -7232,7 +7232,7 @@ uint32_t sve_vqm1_for_el_sm(CPUARMState *env, int el, bool sm) if (el <= 1 && !el_is_in_host(env, el)) { len = MIN(len, 0xf & (uint32_t)cr[1]); } - if (el <= 2 && arm_feature(env, ARM_FEATURE_EL2)) { + if (el <= 2 && arm_is_el2_enabled(env)) { len = MIN(len, 0xf & (uint32_t)cr[2]); } if (arm_feature(env, ARM_FEATURE_EL3)) {
When determining the current vector length, the SMCR_EL2.LEN and SVCR_EL2.LEN settings should only be considered if EL2 is enabled (compare the pseudocode CurrentSVL and CurrentNSVL which call EL2Enabled()). We were checking against ARM_FEATURE_EL2 rather than calling arm_is_el2_enabled(), which meant that we would look at SMCR_EL2/SVCR_EL2 when in Secure EL1 or Secure EL0 even if Secure EL2 was not enabled. Use the correct check in sve_vqm1_for_el_sm(). Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- target/arm/helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)