Message ID | 20221205135538.3545051-3-mwen@igalia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/v3d: replace obj lookup steps with | expand |
On 12/5/22 10:55, Melissa Wen wrote: > As v3d_lookup_bos() performs the same steps as drm_gem_objects_lookup(), > replace the explicit code in v3d to simply use the DRM function. > > Signed-off-by: Melissa Wen <mwen@igalia.com> Reviewed-by: Maíra Canal <mcanal@igalia.com> Best Regards, - Maíra Canal > --- > drivers/gpu/drm/v3d/v3d_gem.c | 49 +++-------------------------------- > 1 file changed, 3 insertions(+), 46 deletions(-) > > diff --git a/drivers/gpu/drm/v3d/v3d_gem.c b/drivers/gpu/drm/v3d/v3d_gem.c > index 31a37572c11d..6e152ef26358 100644 > --- a/drivers/gpu/drm/v3d/v3d_gem.c > +++ b/drivers/gpu/drm/v3d/v3d_gem.c > @@ -299,10 +299,6 @@ v3d_lookup_bos(struct drm_device *dev, > u64 bo_handles, > u32 bo_count) > { > - u32 *handles; > - int ret = 0; > - int i; > - > job->bo_count = bo_count; > > if (!job->bo_count) { > @@ -313,48 +309,9 @@ v3d_lookup_bos(struct drm_device *dev, > return -EINVAL; > } > > - job->bo = kvmalloc_array(job->bo_count, > - sizeof(struct drm_gem_dma_object *), > - GFP_KERNEL | __GFP_ZERO); > - if (!job->bo) { > - DRM_DEBUG("Failed to allocate validated BO pointers\n"); > - return -ENOMEM; > - } > - > - handles = kvmalloc_array(job->bo_count, sizeof(u32), GFP_KERNEL); > - if (!handles) { > - ret = -ENOMEM; > - DRM_DEBUG("Failed to allocate incoming GEM handles\n"); > - goto fail; > - } > - > - if (copy_from_user(handles, > - (void __user *)(uintptr_t)bo_handles, > - job->bo_count * sizeof(u32))) { > - ret = -EFAULT; > - DRM_DEBUG("Failed to copy in GEM handles\n"); > - goto fail; > - } > - > - spin_lock(&file_priv->table_lock); > - for (i = 0; i < job->bo_count; i++) { > - struct drm_gem_object *bo = idr_find(&file_priv->object_idr, > - handles[i]); > - if (!bo) { > - DRM_DEBUG("Failed to look up GEM BO %d: %d\n", > - i, handles[i]); > - ret = -ENOENT; > - spin_unlock(&file_priv->table_lock); > - goto fail; > - } > - drm_gem_object_get(bo); > - job->bo[i] = bo; > - } > - spin_unlock(&file_priv->table_lock); > - > -fail: > - kvfree(handles); > - return ret; > + return drm_gem_objects_lookup(file_priv, > + (void __user *)(uintptr_t)bo_handles, > + job->bo_count, &job->bo); > } > > static void
On 12/05, Maíra Canal wrote: > On 12/5/22 10:55, Melissa Wen wrote: > > As v3d_lookup_bos() performs the same steps as drm_gem_objects_lookup(), > > replace the explicit code in v3d to simply use the DRM function. > > > > Signed-off-by: Melissa Wen <mwen@igalia.com> > > Reviewed-by: Maíra Canal <mcanal@igalia.com> Applied this series to drm-misc-next. Thanks, Melissa > > Best Regards, > - Maíra Canal > > > --- > > drivers/gpu/drm/v3d/v3d_gem.c | 49 +++-------------------------------- > > 1 file changed, 3 insertions(+), 46 deletions(-) > > > > diff --git a/drivers/gpu/drm/v3d/v3d_gem.c b/drivers/gpu/drm/v3d/v3d_gem.c > > index 31a37572c11d..6e152ef26358 100644 > > --- a/drivers/gpu/drm/v3d/v3d_gem.c > > +++ b/drivers/gpu/drm/v3d/v3d_gem.c > > @@ -299,10 +299,6 @@ v3d_lookup_bos(struct drm_device *dev, > > u64 bo_handles, > > u32 bo_count) > > { > > - u32 *handles; > > - int ret = 0; > > - int i; > > - > > job->bo_count = bo_count; > > > > if (!job->bo_count) { > > @@ -313,48 +309,9 @@ v3d_lookup_bos(struct drm_device *dev, > > return -EINVAL; > > } > > > > - job->bo = kvmalloc_array(job->bo_count, > > - sizeof(struct drm_gem_dma_object *), > > - GFP_KERNEL | __GFP_ZERO); > > - if (!job->bo) { > > - DRM_DEBUG("Failed to allocate validated BO pointers\n"); > > - return -ENOMEM; > > - } > > - > > - handles = kvmalloc_array(job->bo_count, sizeof(u32), GFP_KERNEL); > > - if (!handles) { > > - ret = -ENOMEM; > > - DRM_DEBUG("Failed to allocate incoming GEM handles\n"); > > - goto fail; > > - } > > - > > - if (copy_from_user(handles, > > - (void __user *)(uintptr_t)bo_handles, > > - job->bo_count * sizeof(u32))) { > > - ret = -EFAULT; > > - DRM_DEBUG("Failed to copy in GEM handles\n"); > > - goto fail; > > - } > > - > > - spin_lock(&file_priv->table_lock); > > - for (i = 0; i < job->bo_count; i++) { > > - struct drm_gem_object *bo = idr_find(&file_priv->object_idr, > > - handles[i]); > > - if (!bo) { > > - DRM_DEBUG("Failed to look up GEM BO %d: %d\n", > > - i, handles[i]); > > - ret = -ENOENT; > > - spin_unlock(&file_priv->table_lock); > > - goto fail; > > - } > > - drm_gem_object_get(bo); > > - job->bo[i] = bo; > > - } > > - spin_unlock(&file_priv->table_lock); > > - > > -fail: > > - kvfree(handles); > > - return ret; > > + return drm_gem_objects_lookup(file_priv, > > + (void __user *)(uintptr_t)bo_handles, > > + job->bo_count, &job->bo); > > } > > > > static void
diff --git a/drivers/gpu/drm/v3d/v3d_gem.c b/drivers/gpu/drm/v3d/v3d_gem.c index 31a37572c11d..6e152ef26358 100644 --- a/drivers/gpu/drm/v3d/v3d_gem.c +++ b/drivers/gpu/drm/v3d/v3d_gem.c @@ -299,10 +299,6 @@ v3d_lookup_bos(struct drm_device *dev, u64 bo_handles, u32 bo_count) { - u32 *handles; - int ret = 0; - int i; - job->bo_count = bo_count; if (!job->bo_count) { @@ -313,48 +309,9 @@ v3d_lookup_bos(struct drm_device *dev, return -EINVAL; } - job->bo = kvmalloc_array(job->bo_count, - sizeof(struct drm_gem_dma_object *), - GFP_KERNEL | __GFP_ZERO); - if (!job->bo) { - DRM_DEBUG("Failed to allocate validated BO pointers\n"); - return -ENOMEM; - } - - handles = kvmalloc_array(job->bo_count, sizeof(u32), GFP_KERNEL); - if (!handles) { - ret = -ENOMEM; - DRM_DEBUG("Failed to allocate incoming GEM handles\n"); - goto fail; - } - - if (copy_from_user(handles, - (void __user *)(uintptr_t)bo_handles, - job->bo_count * sizeof(u32))) { - ret = -EFAULT; - DRM_DEBUG("Failed to copy in GEM handles\n"); - goto fail; - } - - spin_lock(&file_priv->table_lock); - for (i = 0; i < job->bo_count; i++) { - struct drm_gem_object *bo = idr_find(&file_priv->object_idr, - handles[i]); - if (!bo) { - DRM_DEBUG("Failed to look up GEM BO %d: %d\n", - i, handles[i]); - ret = -ENOENT; - spin_unlock(&file_priv->table_lock); - goto fail; - } - drm_gem_object_get(bo); - job->bo[i] = bo; - } - spin_unlock(&file_priv->table_lock); - -fail: - kvfree(handles); - return ret; + return drm_gem_objects_lookup(file_priv, + (void __user *)(uintptr_t)bo_handles, + job->bo_count, &job->bo); } static void
As v3d_lookup_bos() performs the same steps as drm_gem_objects_lookup(), replace the explicit code in v3d to simply use the DRM function. Signed-off-by: Melissa Wen <mwen@igalia.com> --- drivers/gpu/drm/v3d/v3d_gem.c | 49 +++-------------------------------- 1 file changed, 3 insertions(+), 46 deletions(-)