habanalabs/gaudi: support CS with no completion
authorOfir Bitton <obitton@habana.ai>
Thu, 3 Dec 2020 14:59:28 +0000 (16:59 +0200)
committerOded Gabbay <ogabbay@kernel.org>
Wed, 27 Jan 2021 19:03:48 +0000 (21:03 +0200)
As part of the staged submission feature, we need Gaudi to support
command submissions that will never get a completion.

Signed-off-by: Ofir Bitton <obitton@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
drivers/misc/habanalabs/common/command_submission.c
drivers/misc/habanalabs/common/habanalabs.h
drivers/misc/habanalabs/gaudi/gaudi.c

index b2b3d2b0f808ad1a39b3fbf804c7eb52245ffff4..ccb4972a555f4d200646a16c843b31acda3e1959 100644 (file)
@@ -225,6 +225,7 @@ static int cs_parser(struct hl_fpriv *hpriv, struct hl_cs_job *job)
        parser.queue_type = job->queue_type;
        parser.is_kernel_allocated_cb = job->is_kernel_allocated_cb;
        job->patched_cb = NULL;
+       parser.completion = true;
 
        rc = hdev->asic_funcs->cs_parser(hdev, &parser);
 
index 2dbee9440a5f848d9cc52f6e7c3f3d18ea03559e..dee73a04411bd835715bf6a85fa56a76511b2257 100644 (file)
@@ -1223,6 +1223,7 @@ struct hl_cs_job {
  *                    MSG_PROT packets. Relevant only for GAUDI as GOYA doesn't
  *                    have streams so the engine can't be busy by another
  *                    stream.
+ * @completion: true if we need completion for this CS.
  */
 struct hl_cs_parser {
        struct hl_cb            *user_cb;
@@ -1237,6 +1238,7 @@ struct hl_cs_parser {
        u8                      job_id;
        u8                      is_kernel_allocated_cb;
        u8                      contains_dma_pkt;
+       u8                      completion;
 };
 
 /*
index 58ad1630192e0570a63624f8942f907a05ad4f96..0324114ab4eeaf822c6dcd912e107bece19c2f53 100644 (file)
@@ -5060,7 +5060,8 @@ static int gaudi_validate_cb(struct hl_device *hdev,
         * 1. A packet that will act as a completion packet
         * 2. A packet that will generate MSI-X interrupt
         */
-       parser->patched_cb_size += sizeof(struct packet_msg_prot) * 2;
+       if (parser->completion)
+               parser->patched_cb_size += sizeof(struct packet_msg_prot) * 2;
 
        return rc;
 }
@@ -5287,8 +5288,11 @@ static int gaudi_parse_cb_mmu(struct hl_device *hdev,
         * 1. A packet that will act as a completion packet
         * 2. A packet that will generate MSI interrupt
         */
-       parser->patched_cb_size = parser->user_cb_size +
-                       sizeof(struct packet_msg_prot) * 2;
+       if (parser->completion)
+               parser->patched_cb_size = parser->user_cb_size +
+                               sizeof(struct packet_msg_prot) * 2;
+       else
+               parser->patched_cb_size = parser->user_cb_size;
 
        rc = hl_cb_create(hdev, &hdev->kernel_cb_mgr, hdev->kernel_ctx,
                                parser->patched_cb_size, false, false,