drm/i915/pmu: Support PMU for all engines
authorTvrtko Ursulin <tvrtko.ursulin@intel.com>
Fri, 19 May 2023 15:49:41 +0000 (08:49 -0700)
committerUmesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Mon, 22 May 2023 18:07:49 +0000 (11:07 -0700)
Given how the metrics are already exported, we also need to run sampling
over engines from all GTs.

Problem of GT frequencies is left for later.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230519154946.3751971-3-umesh.nerlige.ramappa@intel.com
drivers/gpu/drm/i915/i915_pmu.c

index 96543dc..9edf87e 100644 (file)
@@ -10,6 +10,7 @@
 #include "gt/intel_engine_pm.h"
 #include "gt/intel_engine_regs.h"
 #include "gt/intel_engine_user.h"
+#include "gt/intel_gt.h"
 #include "gt/intel_gt_pm.h"
 #include "gt/intel_gt_regs.h"
 #include "gt/intel_rc6.h"
@@ -425,8 +426,9 @@ static enum hrtimer_restart i915_sample(struct hrtimer *hrtimer)
        struct drm_i915_private *i915 =
                container_of(hrtimer, struct drm_i915_private, pmu.timer);
        struct i915_pmu *pmu = &i915->pmu;
-       struct intel_gt *gt = to_gt(i915);
        unsigned int period_ns;
+       struct intel_gt *gt;
+       unsigned int i;
        ktime_t now;
 
        if (!READ_ONCE(pmu->timer_enabled))
@@ -442,8 +444,13 @@ static enum hrtimer_restart i915_sample(struct hrtimer *hrtimer)
         * grabbing the forcewake. However the potential error from timer call-
         * back delay greatly dominates this so we keep it simple.
         */
-       engines_sample(gt, period_ns);
-       frequency_sample(gt, period_ns);
+
+       for_each_gt(gt, i915, i) {
+               engines_sample(gt, period_ns);
+
+               if (i == 0) /* FIXME */
+                       frequency_sample(gt, period_ns);
+       }
 
        hrtimer_forward(hrtimer, now, ns_to_ktime(PERIOD));