Move from the deprecated mmap hook to the new mmap_prepare hook. The hook only sets VMA flags and operations. The VMA private data is already NULL at this point, so we no longer explicitly clear it. Signed-off-by: Lorenzo Stoakes (ARM) --- drivers/xen/privcmd.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c index 5e56fbc93447..16f96c05af2d 100644 --- a/drivers/xen/privcmd.c +++ b/drivers/xen/privcmd.c @@ -1630,14 +1630,13 @@ static const struct vm_operations_struct privcmd_vm_ops = { .fault = privcmd_fault }; -static int privcmd_mmap(struct file *file, struct vm_area_struct *vma) +static int privcmd_mmap_prepare(struct vm_area_desc *desc) { /* DONTCOPY is essential for Xen because copy_page_range doesn't know * how to recreate these mappings */ - vm_flags_set(vma, VM_IO | VM_PFNMAP | VM_DONTCOPY | - VM_DONTEXPAND | VM_DONTDUMP); - vma->vm_ops = &privcmd_vm_ops; - vma->vm_private_data = NULL; + vma_desc_set_flags(desc, VMA_IO_BIT, VMA_PFNMAP_BIT, VMA_DONTCOPY_BIT, + VMA_DONTEXPAND_BIT, VMA_DONTDUMP_BIT); + desc->vm_ops = &privcmd_vm_ops; return 0; } @@ -1666,7 +1665,7 @@ const struct file_operations xen_privcmd_fops = { .unlocked_ioctl = privcmd_ioctl, .open = privcmd_open, .release = privcmd_release, - .mmap = privcmd_mmap, + .mmap_prepare = privcmd_mmap_prepare, }; EXPORT_SYMBOL_GPL(xen_privcmd_fops); -- 2.56.0 Move from the deprecated mmap hook to the new mmap_prepare hook. The hook only sets the VMA operations. Signed-off-by: Lorenzo Stoakes (ARM) --- arch/powerpc/kvm/book3s_64_vio.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/powerpc/kvm/book3s_64_vio.c b/arch/powerpc/kvm/book3s_64_vio.c index c5f3f5b29d89..05f6f2c9a432 100644 --- a/arch/powerpc/kvm/book3s_64_vio.c +++ b/arch/powerpc/kvm/book3s_64_vio.c @@ -247,9 +247,9 @@ static const struct vm_operations_struct kvm_spapr_tce_vm_ops = { .fault = kvm_spapr_tce_fault, }; -static int kvm_spapr_tce_mmap(struct file *file, struct vm_area_struct *vma) +static int kvm_spapr_tce_mmap_prepare(struct vm_area_desc *desc) { - vma->vm_ops = &kvm_spapr_tce_vm_ops; + desc->vm_ops = &kvm_spapr_tce_vm_ops; return 0; } @@ -282,7 +282,7 @@ static int kvm_spapr_tce_release(struct inode *inode, struct file *filp) } static const struct file_operations kvm_spapr_tce_fops = { - .mmap = kvm_spapr_tce_mmap, + .mmap_prepare = kvm_spapr_tce_mmap_prepare, .release = kvm_spapr_tce_release, }; -- 2.56.0 Move from the deprecated mmap hook to the new mmap_prepare hook for both the mshv_vtl and mshv_vtl_low devices. These only set VMA operations and flags. Signed-off-by: Lorenzo Stoakes (ARM) --- drivers/hv/mshv_vtl_main.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/hv/mshv_vtl_main.c b/drivers/hv/mshv_vtl_main.c index d8225242c73f..e372d4c0188d 100644 --- a/drivers/hv/mshv_vtl_main.c +++ b/drivers/hv/mshv_vtl_main.c @@ -832,9 +832,9 @@ static const struct vm_operations_struct mshv_vtl_vm_ops = { .fault = mshv_vtl_fault, }; -static int mshv_vtl_mmap(struct file *filp, struct vm_area_struct *vma) +static int mshv_vtl_mmap_prepare(struct vm_area_desc *desc) { - vma->vm_ops = &mshv_vtl_vm_ops; + desc->vm_ops = &mshv_vtl_vm_ops; return 0; } @@ -852,7 +852,7 @@ static const struct file_operations mshv_vtl_fops = { .owner = THIS_MODULE, .unlocked_ioctl = mshv_vtl_ioctl, .release = mshv_vtl_release, - .mmap = mshv_vtl_mmap, + .mmap_prepare = mshv_vtl_mmap_prepare, }; static void mshv_vtl_synic_mask_vmbus_sint(void *info) @@ -1283,10 +1283,10 @@ static const struct vm_operations_struct mshv_vtl_low_vm_ops = { .huge_fault = mshv_vtl_low_huge_fault, }; -static int mshv_vtl_low_mmap(struct file *filp, struct vm_area_struct *vma) +static int mshv_vtl_low_mmap_prepare(struct vm_area_desc *desc) { - vma->vm_ops = &mshv_vtl_low_vm_ops; - vm_flags_set(vma, VM_HUGEPAGE | VM_MIXEDMAP); + desc->vm_ops = &mshv_vtl_low_vm_ops; + vma_desc_set_flags(desc, VMA_HUGEPAGE_BIT, VMA_MIXEDMAP_BIT); return 0; } @@ -1294,7 +1294,7 @@ static int mshv_vtl_low_mmap(struct file *filp, struct vm_area_struct *vma) static const struct file_operations mshv_vtl_low_file_ops = { .owner = THIS_MODULE, .open = mshv_vtl_low_open, - .mmap = mshv_vtl_low_mmap, + .mmap_prepare = mshv_vtl_low_mmap_prepare, }; static struct miscdevice mshv_vtl_low = { -- 2.56.0 Move from the deprecated mmap hook to the new mmap_prepare hook. The hook only sets VMA flags, operations and private data. Signed-off-by: Lorenzo Stoakes (ARM) --- drivers/vdpa/vdpa_user/iova_domain.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/vdpa/vdpa_user/iova_domain.c b/drivers/vdpa/vdpa_user/iova_domain.c index b6c958224b7c..64465f690a4d 100644 --- a/drivers/vdpa/vdpa_user/iova_domain.c +++ b/drivers/vdpa/vdpa_user/iova_domain.c @@ -575,13 +575,13 @@ static const struct vm_operations_struct vduse_domain_mmap_ops = { .fault = vduse_domain_mmap_fault, }; -static int vduse_domain_mmap(struct file *file, struct vm_area_struct *vma) +static int vduse_domain_mmap_prepare(struct vm_area_desc *desc) { - struct vduse_iova_domain *domain = file->private_data; + struct vduse_iova_domain *domain = desc->file->private_data; - vm_flags_set(vma, VM_DONTDUMP | VM_DONTEXPAND); - vma->vm_private_data = domain; - vma->vm_ops = &vduse_domain_mmap_ops; + vma_desc_set_flags(desc, VMA_DONTDUMP_BIT, VMA_DONTEXPAND_BIT); + desc->private_data = domain; + desc->vm_ops = &vduse_domain_mmap_ops; return 0; } @@ -606,7 +606,7 @@ static int vduse_domain_release(struct inode *inode, struct file *file) static const struct file_operations vduse_domain_fops = { .owner = THIS_MODULE, - .mmap = vduse_domain_mmap, + .mmap_prepare = vduse_domain_mmap_prepare, .release = vduse_domain_release, }; -- 2.56.0 Move from the deprecated mmap hook to the new mmap_prepare hook. The hook only checks that the mapping is shared and sets VMA flags, operations and private data. Signed-off-by: Lorenzo Stoakes (ARM) --- arch/x86/kernel/cpu/sgx/virt.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/arch/x86/kernel/cpu/sgx/virt.c b/arch/x86/kernel/cpu/sgx/virt.c index 6a1933ddc6fc..850990519ca5 100644 --- a/arch/x86/kernel/cpu/sgx/virt.c +++ b/arch/x86/kernel/cpu/sgx/virt.c @@ -98,17 +98,18 @@ static const struct vm_operations_struct sgx_vepc_vm_ops = { .fault = sgx_vepc_fault, }; -static int sgx_vepc_mmap(struct file *file, struct vm_area_struct *vma) +static int sgx_vepc_mmap_prepare(struct vm_area_desc *desc) { - struct sgx_vepc *vepc = file->private_data; + struct sgx_vepc *vepc = desc->file->private_data; - if (!(vma->vm_flags & VM_SHARED)) + if (!vma_desc_test(desc, VMA_SHARED_BIT)) return -EINVAL; - vma->vm_ops = &sgx_vepc_vm_ops; + desc->vm_ops = &sgx_vepc_vm_ops; /* Don't copy VMA in fork() */ - vm_flags_set(vma, VM_PFNMAP | VM_IO | VM_DONTDUMP | VM_DONTCOPY); - vma->vm_private_data = vepc; + vma_desc_set_flags(desc, VMA_PFNMAP_BIT, VMA_IO_BIT, VMA_DONTDUMP_BIT, + VMA_DONTCOPY_BIT); + desc->private_data = vepc; return 0; } @@ -315,7 +316,7 @@ static const struct file_operations sgx_vepc_fops = { .unlocked_ioctl = sgx_vepc_ioctl, .compat_ioctl = sgx_vepc_ioctl, .release = sgx_vepc_release, - .mmap = sgx_vepc_mmap, + .mmap_prepare = sgx_vepc_mmap_prepare, }; static struct miscdevice sgx_vepc_dev = { -- 2.56.0 Move from the deprecated mmap hook to the new mmap_prepare hook. The hook only updates the access time and sets the VMA operations. Signed-off-by: Lorenzo Stoakes (ARM) --- fs/udf/file.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fs/udf/file.c b/fs/udf/file.c index 02e9314818dc..d5e80c6cae96 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c @@ -190,10 +190,10 @@ static int udf_release_file(struct inode *inode, struct file *filp) return 0; } -static int udf_file_mmap(struct file *file, struct vm_area_struct *vma) +static int udf_file_mmap_prepare(struct vm_area_desc *desc) { - file_accessed(file); - vma->vm_ops = &udf_file_vm_ops; + file_accessed(desc->file); + desc->vm_ops = &udf_file_vm_ops; return 0; } @@ -202,7 +202,7 @@ const struct file_operations udf_file_operations = { .read_iter = generic_file_read_iter, .unlocked_ioctl = udf_ioctl, .open = generic_file_open, - .mmap = udf_file_mmap, + .mmap_prepare = udf_file_mmap_prepare, .write_iter = udf_file_write_iter, .release = udf_release_file, .fsync = simple_fsync, -- 2.56.0 Move from the deprecated mmap hook to the new mmap_prepare hook for the policy and status files. The policy file only sets VMA flags and operations. The status file remaps a single page, so use the PFN remap mmap action to do so. Signed-off-by: Lorenzo Stoakes (ARM) --- security/selinux/selinuxfs.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c index 310e19efff1d..e78c65685020 100644 --- a/security/selinux/selinuxfs.c +++ b/security/selinux/selinuxfs.c @@ -236,27 +236,25 @@ static ssize_t sel_read_handle_status(struct file *filp, char __user *buf, sizeof(struct selinux_kernel_status)); } -static int sel_mmap_handle_status(struct file *filp, - struct vm_area_struct *vma) +static int sel_mmap_prepare_handle_status(struct vm_area_desc *desc) { - struct page *status = filp->private_data; - unsigned long size = vma->vm_end - vma->vm_start; + struct page *status = desc->file->private_data; BUG_ON(!status); /* only allows one page from the head */ - if (vma->vm_pgoff > 0 || size != PAGE_SIZE) + if (desc->pgoff > 0 || vma_desc_size(desc) != PAGE_SIZE) return -EIO; - return remap_pfn_range(vma, vma->vm_start, - page_to_pfn(status), - size, vma->vm_page_prot); + mmap_action_remap_full(desc, page_to_pfn(status)); + + return 0; } static const struct file_operations sel_handle_status_ops = { .open = sel_open_handle_status, .read = sel_read_handle_status, - .mmap = sel_mmap_handle_status, + .mmap_prepare = sel_mmap_prepare_handle_status, .llseek = generic_file_llseek, }; @@ -419,10 +417,10 @@ static const struct vm_operations_struct sel_mmap_policy_ops = { .page_mkwrite = sel_mmap_policy_fault, }; -static int sel_mmap_policy(struct file *filp, struct vm_area_struct *vma) +static int sel_mmap_prepare_policy(struct vm_area_desc *desc) { - vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP); - vma->vm_ops = &sel_mmap_policy_ops; + vma_desc_set_flags(desc, VMA_DONTEXPAND_BIT, VMA_DONTDUMP_BIT); + desc->vm_ops = &sel_mmap_policy_ops; return 0; } @@ -430,7 +428,7 @@ static int sel_mmap_policy(struct file *filp, struct vm_area_struct *vma) static const struct file_operations sel_policy_ops = { .open = sel_open_policy, .read = sel_read_policy, - .mmap = sel_mmap_policy, + .mmap_prepare = sel_mmap_prepare_policy, .release = sel_release_policy, .llseek = generic_file_llseek, }; -- 2.56.0 Move from the deprecated mmap hook to the new mmap_prepare hook for the xenfs xsd_kva file and the xenbus_backend device, both of which remap the xenstore interface page. Use the PFN remap mmap action to do so, retaining the -EAGAIN error on failure via the action error override. Signed-off-by: Lorenzo Stoakes (ARM) --- drivers/xen/xenbus/xenbus_dev_backend.c | 14 ++++++-------- drivers/xen/xenfs/xenstored.c | 14 ++++++-------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/drivers/xen/xenbus/xenbus_dev_backend.c b/drivers/xen/xenbus/xenbus_dev_backend.c index edba5fecde4d..3e4cb267f411 100644 --- a/drivers/xen/xenbus/xenbus_dev_backend.c +++ b/drivers/xen/xenbus/xenbus_dev_backend.c @@ -89,27 +89,25 @@ static long xenbus_backend_ioctl(struct file *file, unsigned int cmd, } } -static int xenbus_backend_mmap(struct file *file, struct vm_area_struct *vma) +static int xenbus_backend_mmap_prepare(struct vm_area_desc *desc) { - size_t size = vma->vm_end - vma->vm_start; + size_t size = vma_desc_size(desc); if (!capable(CAP_SYS_ADMIN)) return -EPERM; - if ((size > PAGE_SIZE) || (vma->vm_pgoff != 0)) + if ((size > PAGE_SIZE) || (desc->pgoff != 0)) return -EINVAL; - if (remap_pfn_range(vma, vma->vm_start, - virt_to_pfn(xen_store_interface), - size, vma->vm_page_prot)) - return -EAGAIN; + mmap_action_remap_full(desc, virt_to_pfn(xen_store_interface)); + desc->action.error_override = -EAGAIN; return 0; } static const struct file_operations xenbus_backend_fops = { .open = xenbus_backend_open, - .mmap = xenbus_backend_mmap, + .mmap_prepare = xenbus_backend_mmap_prepare, .unlocked_ioctl = xenbus_backend_ioctl, }; diff --git a/drivers/xen/xenfs/xenstored.c b/drivers/xen/xenfs/xenstored.c index f59235f9f8a2..0cf57c286adb 100644 --- a/drivers/xen/xenfs/xenstored.c +++ b/drivers/xen/xenfs/xenstored.c @@ -31,24 +31,22 @@ static int xsd_kva_open(struct inode *inode, struct file *file) return 0; } -static int xsd_kva_mmap(struct file *file, struct vm_area_struct *vma) +static int xsd_kva_mmap_prepare(struct vm_area_desc *desc) { - size_t size = vma->vm_end - vma->vm_start; + size_t size = vma_desc_size(desc); - if ((size > PAGE_SIZE) || (vma->vm_pgoff != 0)) + if ((size > PAGE_SIZE) || (desc->pgoff != 0)) return -EINVAL; - if (remap_pfn_range(vma, vma->vm_start, - virt_to_pfn(xen_store_interface), - size, vma->vm_page_prot)) - return -EAGAIN; + mmap_action_remap_full(desc, virt_to_pfn(xen_store_interface)); + desc->action.error_override = -EAGAIN; return 0; } const struct file_operations xsd_kva_file_ops = { .open = xsd_kva_open, - .mmap = xsd_kva_mmap, + .mmap_prepare = xsd_kva_mmap_prepare, .read = xsd_read, .release = xsd_release, }; -- 2.56.0 Move from the deprecated mmap hook to the new mmap_prepare hook for both the LPC control and P2A control drivers. Both remap a range of their reserved memory region, so use the PFN remap mmap action to do so, retaining the -EAGAIN error on failure via the action error override. Signed-off-by: Lorenzo Stoakes (ARM) --- drivers/soc/aspeed/aspeed-lpc-ctrl.c | 20 +++++++++----------- drivers/soc/aspeed/aspeed-p2a-ctrl.c | 22 ++++++++-------------- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/drivers/soc/aspeed/aspeed-lpc-ctrl.c b/drivers/soc/aspeed/aspeed-lpc-ctrl.c index 4d8574cac703..9258762354cc 100644 --- a/drivers/soc/aspeed/aspeed-lpc-ctrl.c +++ b/drivers/soc/aspeed/aspeed-lpc-ctrl.c @@ -47,22 +47,20 @@ static struct aspeed_lpc_ctrl *file_aspeed_lpc_ctrl(struct file *file) miscdev); } -static int aspeed_lpc_ctrl_mmap(struct file *file, struct vm_area_struct *vma) +static int aspeed_lpc_ctrl_mmap_prepare(struct vm_area_desc *desc) { - struct aspeed_lpc_ctrl *lpc_ctrl = file_aspeed_lpc_ctrl(file); - unsigned long vsize = vma->vm_end - vma->vm_start; - pgprot_t prot = vma->vm_page_prot; + struct aspeed_lpc_ctrl *lpc_ctrl = file_aspeed_lpc_ctrl(desc->file); - if (vma->vm_pgoff + vma_pages(vma) > lpc_ctrl->mem_size >> PAGE_SHIFT) + if (desc->pgoff + vma_desc_pages(desc) > + lpc_ctrl->mem_size >> PAGE_SHIFT) return -EINVAL; /* ast2400/2500 AHB accesses are not cache coherent */ - prot = pgprot_noncached(prot); + desc->page_prot = pgprot_noncached(desc->page_prot); - if (remap_pfn_range(vma, vma->vm_start, - (lpc_ctrl->mem_base >> PAGE_SHIFT) + vma->vm_pgoff, - vsize, prot)) - return -EAGAIN; + mmap_action_remap_full(desc, + (lpc_ctrl->mem_base >> PAGE_SHIFT) + desc->pgoff); + desc->action.error_override = -EAGAIN; return 0; } @@ -216,7 +214,7 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, unsigned int cmd, static const struct file_operations aspeed_lpc_ctrl_fops = { .owner = THIS_MODULE, - .mmap = aspeed_lpc_ctrl_mmap, + .mmap_prepare = aspeed_lpc_ctrl_mmap_prepare, .unlocked_ioctl = aspeed_lpc_ctrl_ioctl, }; diff --git a/drivers/soc/aspeed/aspeed-p2a-ctrl.c b/drivers/soc/aspeed/aspeed-p2a-ctrl.c index b6b7b80f842a..ad59ff28c013 100644 --- a/drivers/soc/aspeed/aspeed-p2a-ctrl.c +++ b/drivers/soc/aspeed/aspeed-p2a-ctrl.c @@ -97,29 +97,23 @@ static void aspeed_p2a_disable_bridge(struct aspeed_p2a_ctrl *p2a_ctrl) regmap_update_bits(p2a_ctrl->regmap, SCU180, SCU180_ENP2A, 0); } -static int aspeed_p2a_mmap(struct file *file, struct vm_area_struct *vma) +static int aspeed_p2a_mmap_prepare(struct vm_area_desc *desc) { - unsigned long vsize; - pgprot_t prot; - struct aspeed_p2a_user *priv = file->private_data; + struct aspeed_p2a_user *priv = desc->file->private_data; struct aspeed_p2a_ctrl *ctrl = priv->parent; if (ctrl->mem_base == 0 && ctrl->mem_size == 0) return -EINVAL; - vsize = vma->vm_end - vma->vm_start; - prot = vma->vm_page_prot; - - if (vma->vm_pgoff + vma_pages(vma) > ctrl->mem_size >> PAGE_SHIFT) + if (desc->pgoff + vma_desc_pages(desc) > ctrl->mem_size >> PAGE_SHIFT) return -EINVAL; /* ast2400/2500 AHB accesses are not cache coherent */ - prot = pgprot_noncached(prot); + desc->page_prot = pgprot_noncached(desc->page_prot); - if (remap_pfn_range(vma, vma->vm_start, - (ctrl->mem_base >> PAGE_SHIFT) + vma->vm_pgoff, - vsize, prot)) - return -EAGAIN; + mmap_action_remap_full(desc, + (ctrl->mem_base >> PAGE_SHIFT) + desc->pgoff); + desc->action.error_override = -EAGAIN; return 0; } @@ -308,7 +302,7 @@ static int aspeed_p2a_release(struct inode *inode, struct file *file) static const struct file_operations aspeed_p2a_ctrl_fops = { .owner = THIS_MODULE, - .mmap = aspeed_p2a_mmap, + .mmap_prepare = aspeed_p2a_mmap_prepare, .unlocked_ioctl = aspeed_p2a_ioctl, .open = aspeed_p2a_open, .release = aspeed_p2a_release, -- 2.56.0 Move from the deprecated mmap hook to the new mmap_prepare hook, using the PFN remap mmap action to map the region. Signed-off-by: Lorenzo Stoakes (ARM) --- drivers/soc/qcom/rmtfs_mem.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/soc/qcom/rmtfs_mem.c b/drivers/soc/qcom/rmtfs_mem.c index 342c0845134e..5e2ac75f41d5 100644 --- a/drivers/soc/qcom/rmtfs_mem.c +++ b/drivers/soc/qcom/rmtfs_mem.c @@ -129,24 +129,22 @@ static const struct class rmtfs_class = { .name = "rmtfs", }; -static int qcom_rmtfs_mem_mmap(struct file *filep, struct vm_area_struct *vma) +static int qcom_rmtfs_mem_mmap_prepare(struct vm_area_desc *desc) { - struct qcom_rmtfs_mem *rmtfs_mem = filep->private_data; + struct qcom_rmtfs_mem *rmtfs_mem = desc->file->private_data; - if (vma->vm_end - vma->vm_start > rmtfs_mem->size) { + if (vma_desc_size(desc) > rmtfs_mem->size) { dev_dbg(&rmtfs_mem->dev, "vm_end[%lu] - vm_start[%lu] [%lu] > mem->size[%pa]\n", - vma->vm_end, vma->vm_start, - (vma->vm_end - vma->vm_start), &rmtfs_mem->size); + desc->end, desc->start, vma_desc_size(desc), + &rmtfs_mem->size); return -EINVAL; } - vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); - return remap_pfn_range(vma, - vma->vm_start, - rmtfs_mem->addr >> PAGE_SHIFT, - vma->vm_end - vma->vm_start, - vma->vm_page_prot); + desc->page_prot = pgprot_writecombine(desc->page_prot); + mmap_action_remap_full(desc, rmtfs_mem->addr >> PAGE_SHIFT); + + return 0; } static const struct file_operations qcom_rmtfs_mem_fops = { @@ -156,7 +154,7 @@ static const struct file_operations qcom_rmtfs_mem_fops = { .write = qcom_rmtfs_mem_write, .release = qcom_rmtfs_mem_release, .llseek = default_llseek, - .mmap = qcom_rmtfs_mem_mmap, + .mmap_prepare = qcom_rmtfs_mem_mmap_prepare, }; static void qcom_rmtfs_mem_release_device(struct device *dev) -- 2.56.0 Move from the deprecated mmap hook to the new mmap_prepare hook, using the PFN remap mmap action to map the shared memory. Signed-off-by: Lorenzo Stoakes (ARM) --- drivers/tee/tee_shm.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c index daa4af1e089e..8fcbf0232aeb 100644 --- a/drivers/tee/tee_shm.c +++ b/drivers/tee/tee_shm.c @@ -567,10 +567,9 @@ static int tee_shm_fop_release(struct inode *inode, struct file *filp) return 0; } -static int tee_shm_fop_mmap(struct file *filp, struct vm_area_struct *vma) +static int tee_shm_fop_mmap_prepare(struct vm_area_desc *desc) { - struct tee_shm *shm = filp->private_data; - size_t size = vma->vm_end - vma->vm_start; + struct tee_shm *shm = desc->file->private_data; /* Refuse sharing shared memory provided by application */ if (shm->flags & TEE_SHM_USER_MAPPED) @@ -580,17 +579,18 @@ static int tee_shm_fop_mmap(struct file *filp, struct vm_area_struct *vma) return -EINVAL; /* check for overflowing the buffer's size */ - if (vma->vm_pgoff + vma_pages(vma) > shm->size >> PAGE_SHIFT) + if (desc->pgoff + vma_desc_pages(desc) > shm->size >> PAGE_SHIFT) return -EINVAL; - return remap_pfn_range(vma, vma->vm_start, shm->paddr >> PAGE_SHIFT, - size, vma->vm_page_prot); + mmap_action_remap_full(desc, shm->paddr >> PAGE_SHIFT); + + return 0; } static const struct file_operations tee_shm_fops = { .owner = THIS_MODULE, .release = tee_shm_fop_release, - .mmap = tee_shm_fop_mmap, + .mmap_prepare = tee_shm_fop_mmap_prepare, }; /** -- 2.56.0 Move from the deprecated mmap hook to the new mmap_prepare hook, using the I/O PFN remap mmap action to map the BAR. Signed-off-by: Lorenzo Stoakes (ARM) --- drivers/misc/bcm-vk/bcm_vk_dev.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/misc/bcm-vk/bcm_vk_dev.c b/drivers/misc/bcm-vk/bcm_vk_dev.c index 88ee3a417616..25a2b46ebad9 100644 --- a/drivers/misc/bcm-vk/bcm_vk_dev.c +++ b/drivers/misc/bcm-vk/bcm_vk_dev.c @@ -1201,9 +1201,9 @@ static long bcm_vk_reset(struct bcm_vk *vk, struct vk_reset __user *arg) return ret; } -static int bcm_vk_mmap(struct file *file, struct vm_area_struct *vma) +static int bcm_vk_mmap_prepare(struct vm_area_desc *desc) { - struct bcm_vk_ctx *ctx = file->private_data; + struct bcm_vk_ctx *ctx = desc->file->private_data; struct bcm_vk *vk = container_of(ctx->miscdev, struct bcm_vk, miscdev); unsigned long pg_size; @@ -1212,16 +1212,16 @@ static int bcm_vk_mmap(struct file *file, struct vm_area_struct *vma) pg_size = ((pci_resource_len(vk->pdev, VK_MMAPABLE_BAR) - 1) >> PAGE_SHIFT) + 1; - if (vma->vm_pgoff + vma_pages(vma) > pg_size) + if (desc->pgoff + vma_desc_pages(desc) > pg_size) return -EINVAL; - vma->vm_pgoff += (pci_resource_start(vk->pdev, VK_MMAPABLE_BAR) - >> PAGE_SHIFT); - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); + desc->pgoff += (pci_resource_start(vk->pdev, VK_MMAPABLE_BAR) + >> PAGE_SHIFT); + desc->page_prot = pgprot_noncached(desc->page_prot); + + mmap_action_ioremap_full(desc, desc->pgoff); - return io_remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, - vma->vm_end - vma->vm_start, - vma->vm_page_prot); + return 0; } static long bcm_vk_ioctl(struct file *file, unsigned int cmd, unsigned long arg) @@ -1262,7 +1262,7 @@ static const struct file_operations bcm_vk_fops = { .write = bcm_vk_write, .poll = bcm_vk_poll, .release = bcm_vk_release, - .mmap = bcm_vk_mmap, + .mmap_prepare = bcm_vk_mmap_prepare, .unlocked_ioctl = bcm_vk_ioctl, }; -- 2.56.0 Move from the deprecated mmap hook to the new mmap_prepare hook, using the I/O PFN remap mmap action to map the clock page and retaining the -EAGAIN error on failure via the action error override. Signed-off-by: Lorenzo Stoakes (ARM) --- drivers/ptp/ptp_vmclock.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/ptp/ptp_vmclock.c b/drivers/ptp/ptp_vmclock.c index bb0e14bac9f2..e44433430044 100644 --- a/drivers/ptp/ptp_vmclock.c +++ b/drivers/ptp/ptp_vmclock.c @@ -364,27 +364,26 @@ struct vmclock_file_state { atomic_t seq; }; -static int vmclock_miscdev_mmap(struct file *fp, struct vm_area_struct *vma) +static int vmclock_miscdev_mmap_prepare(struct vm_area_desc *desc) { - struct vmclock_file_state *fst = fp->private_data; + struct vmclock_file_state *fst = desc->file->private_data; struct vmclock_state *st = fst->st; - if ((vma->vm_flags & (VM_READ|VM_WRITE)) != VM_READ) + if (!vma_desc_test(desc, VMA_READ_BIT) || + vma_desc_test(desc, VMA_WRITE_BIT)) return -EROFS; /* * Restrict the read-only mapping so it cannot be upgraded to * writable later with mprotect(). */ - vm_flags_clear(vma, VM_MAYWRITE); + vma_desc_clear_flags(desc, VMA_MAYWRITE_BIT); - if (vma->vm_end - vma->vm_start != PAGE_SIZE || vma->vm_pgoff) + if (vma_desc_size(desc) != PAGE_SIZE || desc->pgoff) return -EINVAL; - if (io_remap_pfn_range(vma, vma->vm_start, - st->res.start >> PAGE_SHIFT, PAGE_SIZE, - vma->vm_page_prot)) - return -EAGAIN; + mmap_action_ioremap_full(desc, st->res.start >> PAGE_SHIFT); + desc->action.error_override = -EAGAIN; return 0; } @@ -484,7 +483,7 @@ static const struct file_operations vmclock_miscdev_fops = { .owner = THIS_MODULE, .open = vmclock_miscdev_open, .release = vmclock_miscdev_release, - .mmap = vmclock_miscdev_mmap, + .mmap_prepare = vmclock_miscdev_mmap_prepare, .read = vmclock_miscdev_read, .poll = vmclock_miscdev_poll, }; -- 2.56.0 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) --- 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