* @type: user interrupt type
  * @wait_list_head: head to the list of user threads pending on this interrupt
  * @wait_list_lock: protects wait_list_head
+ * @timestamp: last timestamp taken upon interrupt
  * @interrupt_id: msix interrupt id
  */
 struct hl_user_interrupt {
        enum hl_user_interrupt_type     type;
        struct list_head                wait_list_head;
        spinlock_t                      wait_list_lock;
+       ktime_t                         timestamp;
        u32                             interrupt_id;
 };
 
 
        struct list_head *ts_reg_free_list_head = NULL;
        struct timestamp_reg_work_obj *job;
        bool reg_node_handle_fail = false;
-       ktime_t now = ktime_get();
        int rc;
 
        /* For registration nodes:
                        if (pend->ts_reg_info.buf) {
                                if (!reg_node_handle_fail) {
                                        rc = handle_registration_node(hdev, pend,
-                                                               &ts_reg_free_list_head, now);
+                                                       &ts_reg_free_list_head, intr->timestamp);
                                        if (rc)
                                                reg_node_handle_fail = true;
                                }
                        } else {
                                /* Handle wait target value node */
-                               pend->fence.timestamp = now;
+                               pend->fence.timestamp = intr->timestamp;
                                complete_all(&pend->fence.completion);
                        }
                }
  */
 irqreturn_t hl_irq_handler_user_interrupt(int irq, void *arg)
 {
+       struct hl_user_interrupt *user_int = arg;
+
+       user_int->timestamp = ktime_get();
+
        return IRQ_WAKE_THREAD;
 }