From: Michael Kelley <[email protected]>

Huge page mappings in the guest physical address space depend on having
matching alignment of the userspace address in the parent partition and
of the guest physical address. Add a comment that captures this
information. See the link to the mailing list thread.

No code or functional change.

Link: 
https://lore.kernel.org/linux-hyperv/[email protected]/T/#m0871d2cae9b297fd397ddb8459e534981307c7dc
Signed-off-by: Michael Kelley <[email protected]>
---
 drivers/hv/mshv_root_main.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c
index 681b58154d5e..bc738ff4508e 100644
--- a/drivers/hv/mshv_root_main.c
+++ b/drivers/hv/mshv_root_main.c
@@ -1389,6 +1389,20 @@ mshv_partition_ioctl_set_memory(struct mshv_partition 
*partition,
        if (mem.flags & BIT(MSHV_SET_MEM_BIT_UNMAP))
                return mshv_unmap_user_memory(partition, mem);
 
+       /*
+        * If the userspace_addr and the guest physical address (as derived
+        * from the guest_pfn) have the same alignment modulo PMD huge page
+        * size, the MSHV driver can map any PMD huge pages to the guest
+        * physical address space as PMD huge pages. If the alignments do
+        * not match, PMD huge pages must be mapped as single pages in the
+        * guest physical address space. The MSHV driver does not enforce
+        * that the alignments match, and it invokes the hypervisor to set
+        * up correct functional mappings either way. See mshv_chunk_stride().
+        * The caller of the ioctl is responsible for providing userspace_addr
+        * and guest_pfn values with matching alignments if it wants the guest
+        * to get the performance benefits of PMD huge page mappings of its
+        * physical address space to real system memory.
+        */
        return mshv_map_user_memory(partition, mem);
 }
 
-- 
2.25.1


Reply via email to