On 6/19/2026 8:31 AM, Ackerley Tng via B4 Relay wrote:
> From: Ackerley Tng <[email protected]>
> 
> Introduce function for KVM to check the private/shared status of guest
           ^
Nit:       a
 > memory at a given GFN.
> 
> This will be used in a later patch.

[...]

>  
> +bool kvm_gmem_is_private(struct kvm *kvm, gfn_t gfn)
> +{
> +     struct kvm_memory_slot *slot = gfn_to_memslot(kvm, gfn);
> +     struct inode *inode;
> +
> +     /*
> +      * If this gfn has no associated memslot, there's no chance of the gfn
> +      * being backed by private memory, since guest_memfd must be used for
> +      * private memory,

"guest_memfd must be used for private memory" is a bit confusing to me.


> and guest_memfd must be associated with some memslot.
> +      */
> +     if (!slot)
> +             return 0;
> +
> +     CLASS(gmem_get_file, file)(slot);
> +     if (!file)
> +             return 0;
> +
> +     inode = file_inode(file);
> +
> +     /*
> +      * Rely on the maple tree's internal RCU lock to ensure a
> +      * stable result. This result can become stale as soon as the
> +      * lock is dropped, so the caller _must_ still protect
> +      * consumption of private vs. shared by checking
> +      * mmu_invalidate_retry_gfn() under mmu_lock to serialize
> +      * against ongoing attribute updates.
> +      */
> +     return kvm_gmem_is_private_mem(inode, kvm_gmem_get_index(slot, gfn));
> +}
> +EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_gmem_is_private);
> +
>  static struct file_operations kvm_gmem_fops = {
>       .mmap           = kvm_gmem_mmap,
>       .open           = generic_file_open,
> 


Reply via email to