diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c index ea097d93d0dd..e24787f2ef4d 100644 --- a/drivers/gpu/msm/kgsl.c +++ b/drivers/gpu/msm/kgsl.c @@ -1057,11 +1057,14 @@ static void kgsl_process_private_close(struct kgsl_device_private *dev_priv, * directories and garbage collect any outstanding resources */ - kgsl_process_uninit_sysfs(private); + process_release_memory(private); /* Release all syncsource objects from process private */ kgsl_syncsource_process_release_syncsources(private); + debugfs_remove_recursive(private->debug_root); + kgsl_process_uninit_sysfs(private); + /* When using global pagetables, do not detach global pagetable */ if (private->pagetable->name != KGSL_MMU_GLOBAL_PT) kgsl_mmu_detach_pagetable(private->pagetable); @@ -1071,15 +1074,8 @@ static void kgsl_process_private_close(struct kgsl_device_private *dev_priv, list_del(&private->list); spin_unlock(&kgsl_driver.proclist_lock); - debugfs_remove_recursive(private->debug_root); - - /* - * Unlock the mutex before releasing the memory - this prevents a - * deadlock with the IOMMU mutex if a page fault occurs. - */ mutex_unlock(&kgsl_driver.process_mutex); - process_release_memory(private); kgsl_process_private_put(private); }