habanalabs: allow to wait on CS without sleep
authorOded Gabbay <oded.gabbay@gmail.com>
Mon, 7 Sep 2020 15:08:51 +0000 (18:08 +0300)
committerOded Gabbay <oded.gabbay@gmail.com>
Tue, 22 Sep 2020 15:49:53 +0000 (18:49 +0300)
The user sometimes wants to check if a CS has completed to clean resources.
In that case, the user doesn't want to sleep but just to check if the CS
has finished and continue with his code.

Add a new definition to the API of the wait on CS. The new definition says
that if the timeout is 0, the driver won't sleep at all but return
immediately after checking if the CS has finished.

Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
drivers/misc/habanalabs/common/command_submission.c
include/uapi/misc/habanalabs.h

index 470bffbe9bdc7afb2e1b119447b9c785ec4dcf68..b2b974ecc431b16d0b6d0d6f05e5c1753ab0587e 100644 (file)
@@ -1180,8 +1180,11 @@ static long _hl_cs_wait_ioctl(struct hl_device *hdev,
                                "Can't wait on CS %llu because current CS is at seq %llu\n",
                                seq, ctx->cs_sequence);
        } else if (fence) {
-               rc = wait_for_completion_interruptible_timeout(
-                               &fence->completion, timeout);
+               if (!timeout_us)
+                       rc = completion_done(&fence->completion);
+               else
+                       rc = wait_for_completion_interruptible_timeout(
+                                       &fence->completion, timeout);
 
                if (fence->error == -ETIMEDOUT)
                        rc = -ETIMEDOUT;
index 69fb44d352922f98b678fcd946156ffb7db3b2b4..d449f8a31ce6e5c45c1b817c8803525bbf471d63 100644 (file)
@@ -914,6 +914,9 @@ struct hl_debug_args {
  * inside the kernel until the CS has finished or until the user-requested
  * timeout has expired.
  *
+ * If the timeout value is 0, the driver won't sleep at all. It will check
+ * the status of the CS and return immediately
+ *
  * The return value of the IOCTL is a standard Linux error code. The possible
  * values are:
  *