diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c index 38b238639e16..b02eb6110e64 100644 --- a/drivers/gpu/msm/kgsl.c +++ b/drivers/gpu/msm/kgsl.c @@ -983,11 +983,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); @@ -997,15 +1000,8 @@ static void kgsl_process_private_close(struct kgsl_device_private *dev_priv, list_del(&private->list); write_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); }