accel/habanalabs: refactor abort of completions and waits
Aborting CS completions should be in command_submission.c but aborting waiting for user interrupts should be in device.c. This separation is also for adding more abort operations in the future. Signed-off-by: Koby Elbaz <kelbaz@habana.ai> Reviewed-by: Oded Gabbay <ogabbay@kernel.org> Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
This commit is contained in:
parent
ad8bfd3619
commit
9a4e44a4ee
@ -1139,11 +1139,10 @@ static void force_complete_cs(struct hl_device *hdev)
|
||||
spin_unlock(&hdev->cs_mirror_lock);
|
||||
}
|
||||
|
||||
void hl_abort_waitings_for_completion(struct hl_device *hdev)
|
||||
void hl_abort_waiting_for_cs_completions(struct hl_device *hdev)
|
||||
{
|
||||
force_complete_cs(hdev);
|
||||
force_complete_multi_cs(hdev);
|
||||
hl_release_pending_user_interrupts(hdev);
|
||||
}
|
||||
|
||||
static void job_wq_completion(struct work_struct *work)
|
||||
|
@ -1157,6 +1157,16 @@ static void take_release_locks(struct hl_device *hdev)
|
||||
mutex_unlock(&hdev->fpriv_ctrl_list_lock);
|
||||
}
|
||||
|
||||
static void hl_abort_waiting_for_completions(struct hl_device *hdev)
|
||||
{
|
||||
hl_abort_waiting_for_cs_completions(hdev);
|
||||
|
||||
/* Release all pending user interrupts, each pending user interrupt
|
||||
* holds a reference to a user context.
|
||||
*/
|
||||
hl_release_pending_user_interrupts(hdev);
|
||||
}
|
||||
|
||||
static void cleanup_resources(struct hl_device *hdev, bool hard_reset, bool fw_reset,
|
||||
bool skip_wq_flush)
|
||||
{
|
||||
@ -1176,10 +1186,7 @@ static void cleanup_resources(struct hl_device *hdev, bool hard_reset, bool fw_r
|
||||
/* flush the MMU prefetch workqueue */
|
||||
flush_workqueue(hdev->prefetch_wq);
|
||||
|
||||
/* Release all pending user interrupts, each pending user interrupt
|
||||
* holds a reference to user context
|
||||
*/
|
||||
hl_release_pending_user_interrupts(hdev);
|
||||
hl_abort_waiting_for_completions(hdev);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1921,7 +1928,7 @@ out:
|
||||
|
||||
hl_ctx_put(ctx);
|
||||
|
||||
hl_abort_waitings_for_completion(hdev);
|
||||
hl_abort_waiting_for_completions(hdev);
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -3934,7 +3934,7 @@ void hl_dec_fini(struct hl_device *hdev);
|
||||
void hl_dec_ctx_fini(struct hl_ctx *ctx);
|
||||
|
||||
void hl_release_pending_user_interrupts(struct hl_device *hdev);
|
||||
void hl_abort_waitings_for_completion(struct hl_device *hdev);
|
||||
void hl_abort_waiting_for_cs_completions(struct hl_device *hdev);
|
||||
int hl_cs_signal_sob_wraparound_handler(struct hl_device *hdev, u32 q_idx,
|
||||
struct hl_hw_sob **hw_sob, u32 count, bool encaps_sig);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user