]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mshv: handle gpa intercepts for arm64
authorAnirudh Rayabharam (Microsoft) <anirudh@anirudhrb.com>
Mon, 5 Jan 2026 12:28:37 +0000 (12:28 +0000)
committerWei Liu <wei.liu@kernel.org>
Thu, 15 Jan 2026 07:29:14 +0000 (07:29 +0000)
The mshv driver now uses movable pages for guests. For arm64 guests
to be functional, handle gpa intercepts for arm64 too (the current
code implements handling only for x86).

Move some arch-agnostic functions out of #ifdefs so that they can be
re-used.

Fixes: b9a66cd5ccbb ("mshv: Add support for movable memory regions")
Signed-off-by: Anirudh Rayabharam (Microsoft) <anirudh@anirudhrb.com>
Signed-off-by: Wei Liu <wei.liu@kernel.org>
drivers/hv/mshv_root_main.c

index 99fdbc3988aae7754a9cf7946794d2c82a696704..681b58154d5eae89d6e59c98cee9758be8ebe35c 100644 (file)
@@ -611,7 +611,6 @@ mshv_partition_region_by_gfn(struct mshv_partition *partition, u64 gfn)
        return NULL;
 }
 
-#ifdef CONFIG_X86_64
 static struct mshv_mem_region *
 mshv_partition_region_by_gfn_get(struct mshv_partition *p, u64 gfn)
 {
@@ -643,12 +642,17 @@ static bool mshv_handle_gpa_intercept(struct mshv_vp *vp)
 {
        struct mshv_partition *p = vp->vp_partition;
        struct mshv_mem_region *region;
-       struct hv_x64_memory_intercept_message *msg;
        bool ret;
        u64 gfn;
-
-       msg = (struct hv_x64_memory_intercept_message *)
+#if defined(CONFIG_X86_64)
+       struct hv_x64_memory_intercept_message *msg =
+               (struct hv_x64_memory_intercept_message *)
+               vp->vp_intercept_msg_page->u.payload;
+#elif defined(CONFIG_ARM64)
+       struct hv_arm64_memory_intercept_message *msg =
+               (struct hv_arm64_memory_intercept_message *)
                vp->vp_intercept_msg_page->u.payload;
+#endif
 
        gfn = HVPFN_DOWN(msg->guest_physical_address);
 
@@ -666,9 +670,6 @@ static bool mshv_handle_gpa_intercept(struct mshv_vp *vp)
 
        return ret;
 }
-#else  /* CONFIG_X86_64 */
-static bool mshv_handle_gpa_intercept(struct mshv_vp *vp) { return false; }
-#endif /* CONFIG_X86_64 */
 
 static bool mshv_vp_handle_intercept(struct mshv_vp *vp)
 {