diff options
author | Eric Anholt <eric@anholt.net> | 2015-05-29 14:37:38 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2015-06-04 14:15:37 -0700 |
commit | 4deff3653db719f62834ca866e818dbe5d403afe (patch) | |
tree | 75c8670353156f3586bbebcd88d58bb42ace1379 | |
parent | 31831905d175291d9c2c504c89ba167b327ee939 (diff) | |
download | linux-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.c | 9 |
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); |