From: Sourab Gupta <sourab.gu...@intel.com>

This patch ensures hrtimer is rescheduled immediately during cb by
doing async call to check for streams data availability.

Signed-off-by: Sourab Gupta <sourab.gu...@intel.com>
Signed-off-by: Sagar Arun Kamble <sagar.a.kam...@intel.com>
---
 drivers/gpu/drm/i915/i915_perf.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c
index 3a72705..630af3e 100644
--- a/drivers/gpu/drm/i915/i915_perf.c
+++ b/drivers/gpu/drm/i915/i915_perf.c
@@ -3465,12 +3465,10 @@ static ssize_t i915_perf_read(struct file *file,
        return ret;
 }
 
-static enum hrtimer_restart poll_check_timer_cb(struct hrtimer *hrtimer)
+static void wake_up_perf_streams(void *data, async_cookie_t cookie)
 {
+       struct drm_i915_private *dev_priv = data;
        struct i915_perf_stream *stream;
-       struct drm_i915_private *dev_priv =
-               container_of(hrtimer, typeof(*dev_priv),
-                            perf.poll_check_timer);
        int idx;
        struct intel_engine_cs *engine;
        enum intel_engine_id id;
@@ -3486,6 +3484,15 @@ static enum hrtimer_restart poll_check_timer_cb(struct 
hrtimer *hrtimer)
                }
                srcu_read_unlock(&engine->srcu, idx);
        }
+}
+
+static enum hrtimer_restart poll_check_timer_cb(struct hrtimer *hrtimer)
+{
+       struct drm_i915_private *dev_priv =
+               container_of(hrtimer, typeof(*dev_priv),
+                            perf.poll_check_timer);
+
+       async_schedule(wake_up_perf_streams, dev_priv);
 
        hrtimer_forward_now(hrtimer, ns_to_ktime(POLL_PERIOD));
 
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to