From e44ece25ba405505b7fd537b41bd0ad52f1250ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konsta=20H=C3=B6ltt=C3=A4?= Date: Wed, 2 Jun 2021 17:33:38 +0300 Subject: [PATCH] gpu: nvgpu: keep usermode region flags on railgate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the gpu is railgated, the usermode region mappings must be cleared. This is already done with zap_vma_ptes() but as an extra measure the vm flags are also zeroed. That is an oversight, so delete that code; in particular the VM_DONTCOPY flag is important so that the mapping does not follow fork, as the design does not allow that. Bug 200726443 Change-Id: I84ed4e38b7de1f0c8cbf4cca6276abfa2409ac3b Signed-off-by: Konsta Hölttä Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2538481 Reviewed-by: svcacv Reviewed-by: svc_kernel_abi Reviewed-by: Sagar Kamble Reviewed-by: Deepak Nibade Reviewed-by: Alex Waterman Reviewed-by: mobile promotions GVS: Gerrit_Virtual_Submit Tested-by: mobile promotions --- drivers/gpu/nvgpu/os/linux/ioctl_ctrl.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/gpu/nvgpu/os/linux/ioctl_ctrl.c b/drivers/gpu/nvgpu/os/linux/ioctl_ctrl.c index 9abfe4ecc..0ebc36f29 100644 --- a/drivers/gpu/nvgpu/os/linux/ioctl_ctrl.c +++ b/drivers/gpu/nvgpu/os/linux/ioctl_ctrl.c @@ -87,7 +87,6 @@ struct gk20a_ctrl_priv { struct nvgpu_list_node list; struct { struct vm_area_struct *vma; - unsigned long flags; bool vma_mapped; } usermode_vma; }; @@ -2306,7 +2305,6 @@ int gk20a_ctrl_dev_mmap(struct file *filp, struct vm_area_struct *vma) vma->vm_end - vma->vm_start, vma->vm_page_prot); if (!err) { priv->usermode_vma.vma = vma; - priv->usermode_vma.flags = vma->vm_flags; vma->vm_private_data = priv; priv->usermode_vma.vma_mapped = true; } @@ -2361,19 +2359,16 @@ static int alter_usermode_mapping(struct gk20a *g, vma->vm_end - vma->vm_start); #endif if (err == 0) { - vma->vm_flags = VM_NONE; priv->usermode_vma.vma_mapped = false; } else { nvgpu_err(g, "can't remove usermode mapping"); } } else { - vma->vm_flags = priv->usermode_vma.flags; err = io_remap_pfn_range(vma, vma->vm_start, g->usermode_regs_bus_addr >> PAGE_SHIFT, vma->vm_end - vma->vm_start, vma->vm_page_prot); if (err != 0) { nvgpu_err(g, "can't restore usermode mapping"); - vma->vm_flags = VM_NONE; } else { priv->usermode_vma.vma_mapped = true; }