[PATCH 05/61] target/arm/hvf: Add KVMID_TO_HVF, HVF_TO_KVMID

Richard Henderson posted 61 patches 1 month ago
[PATCH 05/61] target/arm/hvf: Add KVMID_TO_HVF, HVF_TO_KVMID
Posted by Richard Henderson 1 month ago
Conversion between KVM system registers ids and the HVF system
register ids is trivial.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/arm/hvf/hvf.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c
index 7b0413093d..47165bd29c 100644
--- a/target/arm/hvf/hvf.c
+++ b/target/arm/hvf/hvf.c
@@ -403,6 +403,26 @@ struct hvf_sreg_match {
     uint32_t cp_idx;
 };
 
+/*
+ * QEMU uses KVM system register ids in the migration format.
+ * Conveniently, HVF uses the same encoding of the op* and cr* parameters
+ * within the low 16 bits of the ids.  Thus conversion between the
+ * formats is trivial.
+ */
+
+#define KVMID_TO_HVF(KVM)  ((KVM) & 0xffff)
+#define HVF_TO_KVMID(HVF)  \
+    (CP_REG_ARM64 | CP_REG_SIZE_U64 | CP_REG_ARM64_SYSREG | (HVF))
+
+/* Verify this at compile-time. */
+
+#define DEF_SYSREG(HVF_ID, ...) \
+  QEMU_BUILD_BUG_ON(HVF_ID != KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARGS__)));
+
+#include "sysreg.c.inc"
+
+#undef DEF_SYSREG
+
 #define DEF_SYSREG(HVF_ID, op0, op1, crn, crm, op2) \
     { HVF_ID, HVF_SYSREG(crn, crm, op0, op1, op2) },
 
-- 
2.43.0
Re: [PATCH 05/61] target/arm/hvf: Add KVMID_TO_HVF, HVF_TO_KVMID
Posted by Manos Pitsidianakis 1 month ago
On Wed, 27 Aug 2025 04:03, Richard Henderson <richard.henderson@linaro.org> wrote:
>Conversion between KVM system registers ids and the HVF system
>register ids is trivial.
>
>Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
>---


Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>

> target/arm/hvf/hvf.c | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
>diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c
>index 7b0413093d..47165bd29c 100644
>--- a/target/arm/hvf/hvf.c
>+++ b/target/arm/hvf/hvf.c
>@@ -403,6 +403,26 @@ struct hvf_sreg_match {
>     uint32_t cp_idx;
> };
> 
>+/*
>+ * QEMU uses KVM system register ids in the migration format.
>+ * Conveniently, HVF uses the same encoding of the op* and cr* parameters
>+ * within the low 16 bits of the ids.  Thus conversion between the
>+ * formats is trivial.
>+ */
>+
>+#define KVMID_TO_HVF(KVM)  ((KVM) & 0xffff)
>+#define HVF_TO_KVMID(HVF)  \
>+    (CP_REG_ARM64 | CP_REG_SIZE_U64 | CP_REG_ARM64_SYSREG | (HVF))
>+
>+/* Verify this at compile-time. */
>+
>+#define DEF_SYSREG(HVF_ID, ...) \
>+  QEMU_BUILD_BUG_ON(HVF_ID != KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARGS__)));
>+
>+#include "sysreg.c.inc"
>+
>+#undef DEF_SYSREG
>+
> #define DEF_SYSREG(HVF_ID, op0, op1, crn, crm, op2) \
>     { HVF_ID, HVF_SYSREG(crn, crm, op0, op1, op2) },
> 
>-- 
>2.43.0
>
>