diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c
index fefb6954fc..c762f3f07a 100644
--- a/target/arm/cpu64.c
+++ b/target/arm/cpu64.c
@@ -469,6 +469,40 @@ static gchar *aarch64_gdb_arch_name(CPUState *cs)
return g_strdup("aarch64");
}
+void arm_cpu_finalize_features(ARMCPU *cpu, Error **errp)
+{
+ Error *local_err = NULL;
+
+#ifdef TARGET_AARCH64
+ if (arm_feature(&cpu->env, ARM_FEATURE_AARCH64)) {
+ if (!cpu_sve_finalize_features(cpu, &local_err)) {
+ error_propagate(errp, local_err);
+ return;
+ }
+
+ /*
+ * KVM does not support modifications to this feature.
+ * We have not registered the cpu properties when KVM
+ * is in use, so the user will not be able to set them.
+ */
+ if (tcg_enabled()) {
+ if (!cpu_pauth_finalize(cpu, &local_err)) {
+ error_propagate(errp, local_err);
+ return;
+ }
+ }
+ }
+#endif /* TARGET_AARCH64 */
diff --git a/target/arm/monitor.c b/target/arm/monitor.c
index 0c72bf7c31..95c1e72cd1 100644
--- a/target/arm/monitor.c
+++ b/target/arm/monitor.c
@@ -184,9 +184,11 @@ CpuModelExpansionInfo
*qmp_query_cpu_model_expansion(CpuModelExpansionType type,
if (!err) {
visit_check_struct(visitor, &err);
}
+#ifdef TARGET_AARCH64
if (!err) {
arm_cpu_finalize_features(ARM_CPU(obj), &err);
}
+#endif /* TARGET_AARCH64 */
visit_end_struct(visitor, NULL);
visit_free(visitor);
if (err) {
@@ -195,7 +197,9 @@ CpuModelExpansionInfo
*qmp_query_cpu_model_expansion(CpuModelExpansionType type,
return NULL;
}
} else {
+#ifdef TARGET_AARCH64
arm_cpu_finalize_features(ARM_CPU(obj), &error_abort);
+#endif /* TARGET_AARCH64 */