summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2015-05-29 14:37:38 -0700
committerEric Anholt <eric@anholt.net>2015-06-04 14:15:37 -0700
commit4deff3653db719f62834ca866e818dbe5d403afe (patch)
tree75c8670353156f3586bbebcd88d58bb42ace1379
parent31831905d175291d9c2c504c89ba167b327ee939 (diff)
downloadlinux-4deff3653db719f62834ca866e818dbe5d403afe.tar.gz
drm/vc4: Avoid repeatedly grabbing/dropping the GEM handle spinlock.
Improves no-swapbuffers drawarrays-mode isosurf performance by 0.219463% +/- 0.166978% (n=4/5) Signed-off-by: Eric Anholt <eric@anholt.net>
-rw-r--r--drivers/gpu/drm/vc4/vc4_gem.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c
index 3cec0eb16a12..17d15df285fd 100644
--- a/drivers/gpu/drm/vc4/vc4_gem.c
+++ b/drivers/gpu/drm/vc4/vc4_gem.c
@@ -311,18 +311,21 @@ vc4_cl_lookup_bos(struct drm_device *dev,
goto fail;
}
+ spin_lock(&file_priv->table_lock);
for (i = 0; i < exec->bo_count; i++) {
- struct drm_gem_object *bo;
-
- bo = drm_gem_object_lookup(dev, file_priv, handles[i]);
+ struct drm_gem_object *bo = idr_find(&file_priv->object_idr,
+ handles[i]);
if (!bo) {
DRM_ERROR("Failed to look up GEM BO %d: %d\n",
i, handles[i]);
ret = -EINVAL;
+ spin_unlock(&file_priv->table_lock);
goto fail;
}
+ drm_gem_object_reference(bo);
exec->bo[i].bo = (struct drm_gem_cma_object *)bo;
}
+ spin_unlock(&file_priv->table_lock);
fail:
kfree(handles);