OSDN Git Service

habanalabs: adjacent timestamps should be more accurate
authorTamir Gilad-Raz <tgiladraz@habana.ai>
Sun, 6 Nov 2022 09:22:16 +0000 (11:22 +0200)
committerOded Gabbay <ogabbay@kernel.org>
Thu, 26 Jan 2023 08:56:21 +0000 (10:56 +0200)
timestamp events that expire on the same interrupt will get the same
timestamp value

Signed-off-by: Tamir Gilad-Raz <tgiladraz@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
drivers/misc/habanalabs/common/irq.c

index 94d537f..8bbcc22 100644 (file)
@@ -228,7 +228,7 @@ static void hl_ts_free_objects(struct work_struct *work)
  * list to a dedicated workqueue to do the actual put.
  */
 static int handle_registration_node(struct hl_device *hdev, struct hl_user_pending_interrupt *pend,
-                                               struct list_head **free_list)
+                                               struct list_head **free_list, ktime_t now)
 {
        struct timestamp_reg_free_node *free_node;
        u64 timestamp;
@@ -246,7 +246,7 @@ static int handle_registration_node(struct hl_device *hdev, struct hl_user_pendi
        if (!free_node)
                return -ENOMEM;
 
-       timestamp = ktime_get_ns();
+       timestamp = ktime_to_ns(now);
 
        *pend->ts_reg_info.timestamp_kernel_addr = timestamp;
 
@@ -298,7 +298,7 @@ static void handle_user_interrupt(struct hl_device *hdev, struct hl_user_interru
                        if (pend->ts_reg_info.buf) {
                                if (!reg_node_handle_fail) {
                                        rc = handle_registration_node(hdev, pend,
-                                                                       &ts_reg_free_list_head);
+                                                               &ts_reg_free_list_head, now);
                                        if (rc)
                                                reg_node_handle_fail = true;
                                }