On Tue, Nov 29, 2022 at 12:02:42PM -0800, Rob Clark wrote:
From: Rob Clark robdclark@chromium.org
vm_open() is not allowed to fail. Fortunately we are guaranteed that the pages are already pinned, and only need to increment the refcnt. So just increment it directly.
Please mention hare that the only issue is the mutex_lock_interruptible, and the only way we've found to hit this is if you send a signal to the original process in a fork() at _just_ the right time.
With that: Reviewed-by: Daniel Vetter daniel.vetter@ffwll.ch
Fixes: 2194a63a818d ("drm: Add library for shmem backed GEM objects") Cc: stable@vger.kernel.org Signed-off-by: Rob Clark robdclark@chromium.org
drivers/gpu/drm/drm_gem_shmem_helper.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c index 110a9eac2af8..9885ba64127f 100644 --- a/drivers/gpu/drm/drm_gem_shmem_helper.c +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -571,12 +571,20 @@ static void drm_gem_shmem_vm_open(struct vm_area_struct *vma) { struct drm_gem_object *obj = vma->vm_private_data; struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj);
int ret; WARN_ON(shmem->base.import_attach);
ret = drm_gem_shmem_get_pages(shmem);
WARN_ON_ONCE(ret != 0);
mutex_lock(&shmem->pages_lock);
/*
* We should have already pinned the pages, vm_open() just grabs
* an additional reference for the new mm the vma is getting
* copied into.
*/
WARN_ON_ONCE(!shmem->pages_use_count);
shmem->pages_use_count++;
mutex_unlock(&shmem->pages_lock); drm_gem_vm_open(vma);
}
2.38.1
-- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch