On 8/7/26 23:52, Ackerley Tng via B4 Relay wrote:
quoted hunk ↗ jump to hunk
From: Sean Christopherson <seanjc@google.com>
Stub in global variable to enable in-place guest_memfd private<=>shared
memory conversion, which will eventually be exposed to userspace via a
module param, and wire up the __kvm_mem_is_private() static call to the
guest_memfd version when in-place conversion is enabled, i.e. when gmem is
the sole authority on private vs. shared memory.
Cc: Fuad Tabba <redacted>
Cc: Xiaoyao Li <redacted>
Signed-off-by: Sean Christopherson <seanjc@google.com>
Co-developed-by: Ackerley Tng <redacted>
Signed-off-by: Ackerley Tng <redacted>
---
include/linux/kvm_host.h | 6 ++++++
virt/kvm/guest_memfd.c | 26 ++++++++++++++++++++++++++
virt/kvm/kvm_main.c | 12 +++++++++++-
3 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index 65fbce46b63f4..9477ecebbbced 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -2580,6 +2580,8 @@ static inline bool kvm_vm_mem_is_private(struct kvm *kvm, gfn_t gfn)
#endif /* CONFIG_KVM_VM_MEMORY_ATTRIBUTES */
#ifdef kvm_arch_has_private_mem
+extern bool gmem_in_place_conversion;
Is there a "supports/has/enable" in there? And should we call it "kvm_gmem" for
completeness?
quoted hunk ↗ jump to hunk
+
typedef bool (kvm_mem_is_private_t)(struct kvm *kvm, gfn_t gfn);
DECLARE_STATIC_CALL(__kvm_mem_is_private, kvm_mem_is_private_t);
@@ -2588,6 +2590,8 @@ static inline bool kvm_mem_is_private(struct kvm *kvm, gfn_t gfn)
return static_call(__kvm_mem_is_private)(kvm, gfn);
}
#else
+#define gmem_in_place_conversion false
+
static inline bool kvm_mem_is_private(struct kvm *kvm, gfn_t gfn)
{
return false;@@ -2595,6 +2599,8 @@ static inline bool kvm_mem_is_private(struct kvm *kvm, gfn_t gfn)
#endif /* kvm_arch_has_private_mem */
#ifdef CONFIG_KVM_GUEST_MEMFD
+bool kvm_gmem_is_private(struct kvm *kvm, gfn_t gfn);
As mentioned in v9, the name is confusing.
kvm_gmem_mem_is_private
?
--
Cheers,
David