summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2013-01-08 15:31:09 -0800
committerEric Anholt <eric@anholt.net>2013-01-08 16:00:44 -0800
commit0df8bb7a989c2865706472132cd9cf18d182bb1c (patch)
tree792093cd8394001357254d3ae84ca022e9bceef3
parentaf3f46c2c9e0604d5459423b60b7e7455b61a29c (diff)
drm/radeon: Avoid the locking overhead in object lookups for relocs.exec-locking
Signed-off-by: Eric Anholt <eric@anholt.net>
-rw-r--r--drivers/gpu/drm/radeon/radeon_cs.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
index 41672cc563f..39ba9509714 100644
--- a/drivers/gpu/drm/radeon/radeon_cs.c
+++ b/drivers/gpu/drm/radeon/radeon_cs.c
@@ -66,9 +66,9 @@ static int radeon_cs_parser_relocs(struct radeon_cs_parser *p)
}
}
if (!duplicate) {
- p->relocs[i].gobj = drm_gem_object_lookup(ddev,
- p->filp,
- r->handle);
+ p->relocs[i].gobj =
+ drm_gem_object_lookup_locked(p->filp,
+ r->handle);
if (p->relocs[i].gobj == NULL) {
DRM_ERROR("gem object lookup failed 0x%x\n",
r->handle);
@@ -519,7 +519,9 @@ int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
r = radeon_cs_handle_lockup(rdev, r);
return r;
}
+ mutex_lock(&filp->table_lock);
r = radeon_cs_parser_relocs(&parser);
+ mutex_unlock(&filp->table_lock);
if (r) {
if (r != -ERESTARTSYS)
DRM_ERROR("Failed to parse relocation %d!\n", r);