[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 14/14] vhost-vdpa: convert mmap hook to mmap_prepare



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>
---
 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




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.