accel/ivpu: Update last_busy in IRQ handler
authorJacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
Wed, 29 Jan 2025 12:56:32 +0000 (13:56 +0100)
committerJacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
Mon, 3 Feb 2025 09:40:34 +0000 (10:40 +0100)
Call pm_runtime_mark_last_busy() in top half of IRQ handler to prevent
device from being runtime suspended before bottom half is executed on
a workqueue.

Reviewed-by: Karol Wachowski <karol.wachowski@intel.com>
Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com>
Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250129125636.1047413-3-jacek.lawrynowicz@linux.intel.com
drivers/accel/ivpu/ivpu_hw.c

index 8099ab047bfe611a5dc0af42200d42d390b9cc49..4199f0bbb435bec2dfdc21c3a17c9d983615a96b 100644 (file)
@@ -10,6 +10,7 @@
 
 #include <linux/dmi.h>
 #include <linux/fault-inject.h>
+#include <linux/pm_runtime.h>
 
 #ifdef CONFIG_FAULT_INJECTION
 DECLARE_FAULT_ATTR(ivpu_hw_failure);
@@ -331,7 +332,9 @@ irqreturn_t ivpu_hw_irq_handler(int irq, void *ptr)
        /* Re-enable global interrupts to re-trigger MSI for pending interrupts */
        ivpu_hw_btrs_global_int_enable(vdev);
 
-       if (ip_handled || btrs_handled)
-               return IRQ_HANDLED;
-       return IRQ_NONE;
+       if (!ip_handled && !btrs_handled)
+               return IRQ_NONE;
+
+       pm_runtime_mark_last_busy(vdev->drm.dev);
+       return IRQ_HANDLED;
 }