Re: [PATCH 14/14] vhost-vdpa: convert mmap hook to mmap_prepare
From: Michael S. Tsirkin
Date: Mon Nov 09 2026 - 08:08:29 EST
On Thu, Nov 05, 2026 at 09:05:45PM +0000, Lorenzo Stoakes (ARM) wrote:
> Move from the deprecated mmap hook to the new mmap_prepare hook. The hook
> only validates the request and sets the VMA flags, operations and page
> protection.
>
> Signed-off-by: Lorenzo Stoakes (ARM) <ljs@xxxxxxxxxx>
Acked-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
Who's merging this, me?
> ---
> drivers/vhost/vdpa.c | 23 ++++++++++++-----------
> 1 file changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c
> index ff7d90719171..993b2d7c8927 100644
> --- a/drivers/vhost/vdpa.c
> +++ b/drivers/vhost/vdpa.c
> @@ -1573,19 +1573,19 @@ static const struct vm_operations_struct vhost_vdpa_vm_ops = {
> .fault = vhost_vdpa_fault,
> };
>
> -static int vhost_vdpa_mmap(struct file *file, struct vm_area_struct *vma)
> +static int vhost_vdpa_mmap_prepare(struct vm_area_desc *desc)
> {
> - struct vhost_vdpa *v = vma->vm_file->private_data;
> + struct vhost_vdpa *v = desc->file->private_data;
> struct vdpa_device *vdpa = v->vdpa;
> const struct vdpa_config_ops *ops = vdpa->config;
> struct vdpa_notification_area notify;
> - unsigned long index = vma->vm_pgoff;
> + unsigned long index = desc->pgoff;
>
> - if (vma->vm_end - vma->vm_start != PAGE_SIZE)
> + if (vma_desc_size(desc) != PAGE_SIZE)
> return -EINVAL;
> - if ((vma->vm_flags & VM_SHARED) == 0)
> + if (!vma_desc_test(desc, VMA_SHARED_BIT))
> return -EINVAL;
> - if (vma->vm_flags & VM_READ)
> + if (vma_desc_test(desc, VMA_READ_BIT))
> return -EINVAL;
> if (!ops->get_vq_notification)
> return -ENOTSUPP;
> @@ -1598,12 +1598,13 @@ static int vhost_vdpa_mmap(struct file *file, struct vm_area_struct *vma)
> return -EINVAL;
> if (notify.addr & (PAGE_SIZE - 1))
> return -EINVAL;
> - if (vma->vm_end - vma->vm_start != notify.size)
> + if (vma_desc_size(desc) != notify.size)
> return -ENOTSUPP;
>
> - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
> - vm_flags_set(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP);
> - vma->vm_ops = &vhost_vdpa_vm_ops;
> + desc->page_prot = pgprot_noncached(desc->page_prot);
> + vma_desc_set_flags(desc, VMA_IO_BIT, VMA_PFNMAP_BIT, VMA_DONTEXPAND_BIT,
> + VMA_DONTDUMP_BIT);
> + desc->vm_ops = &vhost_vdpa_vm_ops;
> return 0;
> }
> #endif /* CONFIG_MMU */
> @@ -1615,7 +1616,7 @@ static const struct file_operations vhost_vdpa_fops = {
> .write_iter = vhost_vdpa_chr_write_iter,
> .unlocked_ioctl = vhost_vdpa_unlocked_ioctl,
> #ifdef CONFIG_MMU
> - .mmap = vhost_vdpa_mmap,
> + .mmap_prepare = vhost_vdpa_mmap_prepare,
> #endif /* CONFIG_MMU */
> .compat_ioctl = compat_ptr_ioctl,
> };
>
> --
> 2.56.0