Re: [PATCH v9 07/41] KVM: guest_memfd: Wire up core private/shared attribute interfaces

Xiaoyao Li <[email protected]>
Newsgroups org.kernel.vger.linux-kselftest,dev.linux.lists.linux-coco,org.kernel.vger.kvm,org.kernel.vger.linux-doc,org.kernel.vger.linux-kernel,org.kernel.vger.linux-trace-kernel,org.kvack.linux-mm
Message-ID <[email protected]>
On 7/29/2026 8:35 AM, Ackerley Tng via B4 Relay wrote:
> diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c
> index 33c9830190e2e..89cf922232920 100644
> --- a/virt/kvm/guest_memfd.c
> +++ b/virt/kvm/guest_memfd.c
> @@ -893,6 +893,27 @@ int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_memory_slot *slot,
>   EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_gmem_get_pfn);
>   
>   #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_POPULATE
> +static bool kvm_range_is_private(struct file *file, pgoff_t index,
> +				 size_t nr_pages, struct kvm *kvm, gfn_t gfn)
> +{
> +	struct inode *inode = file_inode(file);
> +	pgoff_t last = index + nr_pages - 1;
> +	struct maple_tree *mt;
> +	void *entry;
> +
> +	if (!gmem_in_place_conversion)
> +		return kvm_range_has_vm_memory_attributes(kvm, gfn, gfn + nr_pages,
> +							  KVM_MEMORY_ATTRIBUTE_PRIVATE,
> +							  KVM_MEMORY_ATTRIBUTE_PRIVATE);
> +
> +	mt = &GMEM_I(inode)->attributes;
> +	mt_for_each(mt, entry, index, last) {
> +		if (kvm_gmem_interpret_entry(inode, entry) !=
> +		    KVM_MEMORY_ATTRIBUTE_PRIVATE)
> +			return false;
> +	}
> +	return true;
> +}
>   
>   static long __kvm_gmem_populate(struct kvm *kvm, struct kvm_memory_slot *slot,
>   				struct file *file, gfn_t gfn, struct page *src_page,
> @@ -913,9 +934,7 @@ static long __kvm_gmem_populate(struct kvm *kvm, struct kvm_memory_slot *slot,
>   
>   	folio_unlock(folio);
>   
> -	if (!kvm_range_has_vm_memory_attributes(kvm, gfn, gfn + 1,
> -						KVM_MEMORY_ATTRIBUTE_PRIVATE,
> -						KVM_MEMORY_ATTRIBUTE_PRIVATE)) {
> +	if (!kvm_range_is_private(file, index, 1, kvm, gfn)) {

It's checking if a single gfn is private.

We can just use kvm_mem_is_private()? And it seems can be a separate patch.

>   		ret = -EINVAL;
>   		goto out_put_folio;
>   	}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.