Commit 29b41cf7 authored by Anshuman Gupta's avatar Anshuman Gupta
Browse files

drm/i915/selftest: Fix engine timestamp and ktime disparity



While reading the engine timestamps there can be uncontrollable
concurrent mmio access via other i915 child drivers and by GuC,
which is not truly atomic context as expected by this selftest,
which may cause mmio latency to read the engine timestamps,
Account such latency to calculate time to read engine timestamp
such that selftest can validate the timestamp and ktime pair.

Cc: Chris Wilson <chris.p.wilson@intel.com>
Signed-off-by: default avatarAnshuman Gupta <anshuman.gupta@intel.com>
Reviewed-by: default avatarBadal Nilawar <badal.nilawar@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230223100503.3323627-2-anshuman.gupta@intel.com
parent 50600605
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -63,8 +63,8 @@ static void measure_clocks(struct intel_engine_cs *engine,

		udelay(1000);

		dt[i] = ktime_sub(ktime_get(), dt[i]);
		cycles[i] += read_timestamp(engine);
		dt[i] = ktime_sub(ktime_get(), dt[i]);
		local_irq_enable();
	}

+2 −2
Original line number Diff line number Diff line
@@ -299,13 +299,13 @@ int live_rps_clock_interval(void *arg)
			for (i = 0; i < 5; i++) {
				preempt_disable();

				dt_[i] = ktime_get();
				cycles_[i] = -intel_uncore_read_fw(gt->uncore, GEN6_RP_CUR_UP_EI);
				dt_[i] = ktime_get();

				udelay(1000);

				dt_[i] = ktime_sub(ktime_get(), dt_[i]);
				cycles_[i] += intel_uncore_read_fw(gt->uncore, GEN6_RP_CUR_UP_EI);
				dt_[i] = ktime_sub(ktime_get(), dt_[i]);

				preempt_enable();
			}