accel/habanalabs: refactor abort of completions and waits
authorKoby Elbaz <kelbaz@habana.ai>
Sun, 4 Dec 2022 16:37:53 +0000 (18:37 +0200)
committerOded Gabbay <ogabbay@kernel.org>
Thu, 8 Jun 2023 09:35:54 +0000 (12:35 +0300)
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>
drivers/accel/habanalabs/common/command_submission.c
drivers/accel/habanalabs/common/device.c
drivers/accel/habanalabs/common/habanalabs.h

index 977cd2710686d0c60540b7291da7cac5dc28f467..4ff3256fdf8b29c00fc2d8ecc222a241b9b86422 100644 (file)
@@ -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)
index fabfc501ef5434c06f1ac8c5934011a6cee83888..c8f4a34d2831dce34687de30fcc465ff836e9126 100644 (file)
@@ -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;
 
index 6b102947cb90af612eb1f650f6d744a9dc2cbe88..f83ea96c653002b8d5a60986a68818042ae6beb8 100644 (file)
@@ -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);