]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
habanalabs: fix user interrupt wait when timeout is 0
authorOded Gabbay <ogabbay@kernel.org>
Tue, 18 Jan 2022 22:09:29 +0000 (00:09 +0200)
committerOded Gabbay <ogabbay@kernel.org>
Mon, 28 Feb 2022 12:22:03 +0000 (14:22 +0200)
When timeout is 0, we need to return the busy status in case the
target value wasn't reached upon entry to the ioctl.

Also return the correct timestamp.

Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
drivers/misc/habanalabs/common/command_submission.c

index 29e0549ff31d8f622338b3954f03f473c45111c9..8dd2f399d1c4984c30621eb6ace78c12a5a029d4 100644 (file)
@@ -2858,8 +2858,7 @@ static int _hl_interrupt_wait_ioctl(struct hl_device *hdev, struct hl_ctx *ctx,
                                struct hl_cb_mgr *cb_mgr, u64 timeout_us,
                                u64 cq_counters_handle, u64 cq_counters_offset,
                                u64 target_value, struct hl_user_interrupt *interrupt,
-                               u32 *status,
-                               u64 *timestamp)
+                               u32 *status, u64 *timestamp)
 {
        struct hl_user_pending_interrupt *pend;
        unsigned long timeout, flags;
@@ -2900,10 +2899,13 @@ static int _hl_interrupt_wait_ioctl(struct hl_device *hdev, struct hl_ctx *ctx,
                *status = HL_WAIT_CS_STATUS_COMPLETED;
                /* There was no interrupt, we assume the completion is now. */
                pend->fence.timestamp = ktime_get();
-       }
+               goto set_timestamp;
 
-       if (!timeout_us || (*status == HL_WAIT_CS_STATUS_COMPLETED))
+       } else if (!timeout_us) {
+               *status = HL_WAIT_CS_STATUS_BUSY;
+               pend->fence.timestamp = ktime_get();
                goto set_timestamp;
+       }
 
        /* Add pending user interrupt to relevant list for the interrupt
         * handler to monitor