@samitouri / QOSamiQemu / commits / ba738b9215

target/arm: Add vq argument to kvm_arch_{get, put}_sve

Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20260216034432.23912-11-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Richard Henderson committed Feb 26, 2026 at 11:27 UTC ba738b92156e1e03e5800d33e86fb1fe3a7d4258
1 file changed +12 -15
target/arm/kvm.c
+12 -15
@@ -2118,16 +2118,15 @@ static int kvm_arch_put_fpsimd(CPUState *cs)
2118 * code the slice index to zero for now as it's unlikely we'll need more than
2119 * one slice for quite some time.
2120 */
2121 -static int kvm_arch_put_sve(CPUState *cs)
2121 +static int kvm_arch_put_sve(CPUState *cs, uint32_t vq)
2122 {
2123 - ARMCPU *cpu = ARM_CPU(cs);
2124 - CPUARMState *env = &cpu->env;
2123 + CPUARMState *env = cpu_env(cs);
2124 uint64_t tmp[ARM_MAX_VQ * 2];
2125 uint64_t *r;
2126 int n, ret;
2127
2128 for (n = 0; n < KVM_ARM64_SVE_NUM_ZREGS; ++n) {
2130 - r = sve_bswap64(tmp, &env->vfp.zregs[n].d[0], cpu->sve_max_vq * 2);
2129 + r = sve_bswap64(tmp, &env->vfp.zregs[n].d[0], vq * 2);
2130 ret = kvm_set_one_reg(cs, KVM_REG_ARM64_SVE_ZREG(n, 0), r);
2131 if (ret) {
2132 return ret;
@@ -2135,8 +2134,7 @@ static int kvm_arch_put_sve(CPUState *cs)
2134 }
2135
2136 for (n = 0; n < KVM_ARM64_SVE_NUM_PREGS; ++n) {
2138 - r = sve_bswap64(tmp, r = &env->vfp.pregs[n].p[0],
2139 - DIV_ROUND_UP(cpu->sve_max_vq * 2, 8));
2137 + r = sve_bswap64(tmp, &env->vfp.pregs[n].p[0], DIV_ROUND_UP(vq * 2, 8));
2138 ret = kvm_set_one_reg(cs, KVM_REG_ARM64_SVE_PREG(n, 0), r);
2139 if (ret) {
2140 return ret;
@@ -2144,7 +2142,7 @@ static int kvm_arch_put_sve(CPUState *cs)
2142 }
2143
2144 r = sve_bswap64(tmp, &env->vfp.pregs[FFR_PRED_NUM].p[0],
2147 - DIV_ROUND_UP(cpu->sve_max_vq * 2, 8));
2145 + DIV_ROUND_UP(vq * 2, 8));
2146 ret = kvm_set_one_reg(cs, KVM_REG_ARM64_SVE_FFR(0), r);
2147 if (ret) {
2148 return ret;
@@ -2236,7 +2234,7 @@ int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp)
2234 }
2235
2236 if (cpu_isar_feature(aa64_sve, cpu)) {
2239 - ret = kvm_arch_put_sve(cs);
2237 + ret = kvm_arch_put_sve(cs, cpu->sve_max_vq);
2238 } else {
2239 ret = kvm_arch_put_fpsimd(cs);
2240 }
@@ -2302,10 +2300,9 @@ static int kvm_arch_get_fpsimd(CPUState *cs)
2300 * code the slice index to zero for now as it's unlikely we'll need more than
2301 * one slice for quite some time.
2302 */
2305 -static int kvm_arch_get_sve(CPUState *cs)
2303 +static int kvm_arch_get_sve(CPUState *cs, uint32_t vq)
2304 {
2307 - ARMCPU *cpu = ARM_CPU(cs);
2308 - CPUARMState *env = &cpu->env;
2305 + CPUARMState *env = cpu_env(cs);
2306 uint64_t *r;
2307 int n, ret;
2308
@@ -2315,7 +2312,7 @@ static int kvm_arch_get_sve(CPUState *cs)
2312 if (ret) {
2313 return ret;
2314 }
2318 - sve_bswap64(r, r, cpu->sve_max_vq * 2);
2315 + sve_bswap64(r, r, vq * 2);
2316 }
2317
2318 for (n = 0; n < KVM_ARM64_SVE_NUM_PREGS; ++n) {
@@ -2324,7 +2321,7 @@ static int kvm_arch_get_sve(CPUState *cs)
2321 if (ret) {
2322 return ret;
2323 }
2327 - sve_bswap64(r, r, DIV_ROUND_UP(cpu->sve_max_vq * 2, 8));
2324 + sve_bswap64(r, r, DIV_ROUND_UP(vq * 2, 8));
2325 }
2326
2327 r = &env->vfp.pregs[FFR_PRED_NUM].p[0];
@@ -2332,7 +2329,7 @@ static int kvm_arch_get_sve(CPUState *cs)
2329 if (ret) {
2330 return ret;
2331 }
2335 - sve_bswap64(r, r, DIV_ROUND_UP(cpu->sve_max_vq * 2, 8));
2332 + sve_bswap64(r, r, DIV_ROUND_UP(vq * 2, 8));
2333
2334 return 0;
2335 }
@@ -2420,7 +2417,7 @@ int kvm_arch_get_registers(CPUState *cs, Error **errp)
2417 }
2418
2419 if (cpu_isar_feature(aa64_sve, cpu)) {
2423 - ret = kvm_arch_get_sve(cs);
2420 + ret = kvm_arch_get_sve(cs, cpu->sve_max_vq);
2421 } else {
2422 ret = kvm_arch_get_fpsimd(cs);
2423 }