|
@@ -441,7 +441,7 @@ void kfd_signal_event_interrupt(unsigned int pasid, uint32_t partial_id,
|
|
|
/*
|
|
|
* Because we are called from arbitrary context (workqueue) as opposed
|
|
|
* to process context, kfd_process could attempt to exit while we are
|
|
|
- * running so the lookup function returns a locked process.
|
|
|
+ * running so the lookup function increments the process ref count.
|
|
|
*/
|
|
|
struct kfd_process *p = kfd_lookup_process_by_pasid(pasid);
|
|
|
|
|
@@ -493,7 +493,7 @@ void kfd_signal_event_interrupt(unsigned int pasid, uint32_t partial_id,
|
|
|
}
|
|
|
|
|
|
mutex_unlock(&p->event_mutex);
|
|
|
- mutex_unlock(&p->mutex);
|
|
|
+ kfd_unref_process(p);
|
|
|
}
|
|
|
|
|
|
static struct kfd_event_waiter *alloc_event_waiters(uint32_t num_events)
|
|
@@ -847,7 +847,7 @@ void kfd_signal_iommu_event(struct kfd_dev *dev, unsigned int pasid,
|
|
|
/*
|
|
|
* Because we are called from arbitrary context (workqueue) as opposed
|
|
|
* to process context, kfd_process could attempt to exit while we are
|
|
|
- * running so the lookup function returns a locked process.
|
|
|
+ * running so the lookup function increments the process ref count.
|
|
|
*/
|
|
|
struct kfd_process *p = kfd_lookup_process_by_pasid(pasid);
|
|
|
struct mm_struct *mm;
|
|
@@ -860,7 +860,7 @@ void kfd_signal_iommu_event(struct kfd_dev *dev, unsigned int pasid,
|
|
|
*/
|
|
|
mm = get_task_mm(p->lead_thread);
|
|
|
if (!mm) {
|
|
|
- mutex_unlock(&p->mutex);
|
|
|
+ kfd_unref_process(p);
|
|
|
return; /* Process is exiting */
|
|
|
}
|
|
|
|
|
@@ -903,7 +903,7 @@ void kfd_signal_iommu_event(struct kfd_dev *dev, unsigned int pasid,
|
|
|
&memory_exception_data);
|
|
|
|
|
|
mutex_unlock(&p->event_mutex);
|
|
|
- mutex_unlock(&p->mutex);
|
|
|
+ kfd_unref_process(p);
|
|
|
}
|
|
|
|
|
|
void kfd_signal_hw_exception_event(unsigned int pasid)
|
|
@@ -911,7 +911,7 @@ void kfd_signal_hw_exception_event(unsigned int pasid)
|
|
|
/*
|
|
|
* Because we are called from arbitrary context (workqueue) as opposed
|
|
|
* to process context, kfd_process could attempt to exit while we are
|
|
|
- * running so the lookup function returns a locked process.
|
|
|
+ * running so the lookup function increments the process ref count.
|
|
|
*/
|
|
|
struct kfd_process *p = kfd_lookup_process_by_pasid(pasid);
|
|
|
|
|
@@ -924,5 +924,5 @@ void kfd_signal_hw_exception_event(unsigned int pasid)
|
|
|
lookup_events_by_type_and_signal(p, KFD_EVENT_TYPE_HW_EXCEPTION, NULL);
|
|
|
|
|
|
mutex_unlock(&p->event_mutex);
|
|
|
- mutex_unlock(&p->mutex);
|
|
|
+ kfd_unref_process(p);
|
|
|
}
|