diff options
author | Eric Anholt <eric@anholt.net> | 2013-01-08 15:31:09 -0800 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2013-01-08 16:00:44 -0800 |
commit | 0df8bb7a989c2865706472132cd9cf18d182bb1c (patch) | |
tree | 792093cd8394001357254d3ae84ca022e9bceef3 | |
parent | af3f46c2c9e0604d5459423b60b7e7455b61a29c (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.c | 8 |
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); |