From: Eric Auger <eric.auger@redhat.com>
KVM_REG_ARM_VENDOR_HYP_BMAP_2 pseudo FW register is exposed
from v6.15 onwards. Backward migration from a >= v6.15 to an older
kernel would fail without cpreg migration tolerance definition
for this register. If the register is present on source but not
on destination, its value must be checked to make sure it matches
the reset value, ie. 0, meaning no service is exposed to the guest,
hence the choice of a ToleranceOnlySrcTestValue migration
tolerance.
Signed-off-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20260420140552.104369-6-eric.auger@redhat.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/cpu64.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c
index e7014022df..a93ad2da5a 100644
--- a/target/arm/cpu64.c
+++ b/target/arm/cpu64.c
@@ -834,6 +834,17 @@ static void kvm_arm_set_cpreg_mig_tolerances(ARMCPU *cpu)
0, 0, ToleranceNotOnBothEnds);
arm_register_cpreg_mig_tolerance(cpu, ARM64_SYS_REG(3, 0, 10, 2, 3),
0, 0, ToleranceNotOnBothEnds);
+
+ /*
+ * KVM_REG_ARM_VENDOR_HYP_BMAP_2 pseudo FW register is exposed
+ * from v6.15 onwards. Backward migration from a >= v6.15 to an older
+ * kernel would fail without cpreg migration tolerance definition.
+ * If the register is present on source but not on destination, make
+ * sure it has its reset value, ie. 0, meaning no service is exposed
+ * to the guest.
+ */
+ arm_register_cpreg_mig_tolerance(cpu, KVM_REG_ARM_FW_FEAT_BMAP_REG(3),
+ UINT64_MAX, 0, ToleranceOnlySrcTestValue);
}
#endif
--
2.43.0