summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/msm/kgsl.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c
index 17344a0e9e28..e3e0b0973410 100644
--- a/drivers/gpu/msm/kgsl.c
+++ b/drivers/gpu/msm/kgsl.c
@@ -410,6 +410,11 @@ kgsl_mem_entry_attach_process(struct kgsl_mem_entry *entry,
ret = kgsl_process_private_get(process);
if (!ret)
return -EBADF;
+
+ ret = kgsl_mem_entry_track_gpuaddr(process, entry);
+ if (ret)
+ goto err_put_proc_priv;
+
idr_preload(GFP_KERNEL);
spin_lock(&process->mem_lock);
id = idr_alloc(&process->mem_idr, entry, 1, 0, GFP_NOWAIT);
@@ -418,20 +423,13 @@ kgsl_mem_entry_attach_process(struct kgsl_mem_entry *entry,
if (id < 0) {
ret = id;
+ kgsl_mem_entry_untrack_gpuaddr(process, entry);
goto err_put_proc_priv;
}
entry->id = id;
entry->priv = process;
- ret = kgsl_mem_entry_track_gpuaddr(process, entry);
- if (ret) {
- spin_lock(&process->mem_lock);
- idr_remove(&process->mem_idr, entry->id);
- spin_unlock(&process->mem_lock);
- goto err_put_proc_priv;
- }
-
/* map the memory after unlocking if gpuaddr has been assigned */
if (entry->memdesc.gpuaddr) {
/* if a secured buffer map it to secure global pagetable */