drm/amdkfd: destroy dbgmgr in notifier release
authorOded Gabbay <oded.gabbay@gmail.com>
Thu, 26 May 2016 05:41:48 +0000 (08:41 +0300)
committerOded Gabbay <oded.gabbay@gmail.com>
Fri, 3 Jun 2016 05:50:40 +0000 (08:50 +0300)
amdkfd need to destroy the debug manager in case amdkfd's notifier
function is called before the unbind function, because in that case,
the unbind function will exit without destroying debug manager.

Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
CC: Stable <stable@vger.kernel.org>
drivers/gpu/drm/amd/amdkfd/kfd_process.c

index a64bc619ed82230efbd76fae2c7ed56deb3fa52a..7708d90b9da9a27438ab706ef7915012d6f8e5fe 100644 (file)
@@ -242,13 +242,19 @@ static void kfd_process_notifier_release(struct mmu_notifier *mn,
        pqm_uninit(&p->pqm);
 
        /* Iterate over all process device data structure and check
-        * if we should reset all wavefronts */
-       list_for_each_entry(pdd, &p->per_device_data, per_device_list)
+        * if we should delete debug managers and reset all wavefronts
+        */
+       list_for_each_entry(pdd, &p->per_device_data, per_device_list) {
+               if ((pdd->dev->dbgmgr) &&
+                               (pdd->dev->dbgmgr->pasid == p->pasid))
+                       kfd_dbgmgr_destroy(pdd->dev->dbgmgr);
+
                if (pdd->reset_wavefronts) {
                        pr_warn("amdkfd: Resetting all wave fronts\n");
                        dbgdev_wave_reset_wavefronts(pdd->dev, p);
                        pdd->reset_wavefronts = false;
                }
+       }
 
        mutex_unlock(&p->mutex);