Commit 3ffbe353 authored by Chris Wilson's avatar Chris Wilson Committed by Joonas Lahtinen
Browse files

drm/i915/selftests: Restore to default heartbeat



Since we temporarily disable the heartbeat and restore back to the
default value, we can use the stored defaults on the engine and avoid
using a local.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200519063123.20673-3-chris@chris-wilson.co.uk


(cherry picked from commit 3a230a55)
Signed-off-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
parent 70cac501
Loading
Loading
Loading
Loading
+10 −15
Original line number Diff line number Diff line
@@ -310,22 +310,20 @@ static bool wait_until_running(struct hang *h, struct i915_request *rq)
			  1000));
}

static void engine_heartbeat_disable(struct intel_engine_cs *engine,
				     unsigned long *saved)
static void engine_heartbeat_disable(struct intel_engine_cs *engine)
{
	*saved = engine->props.heartbeat_interval_ms;
	engine->props.heartbeat_interval_ms = 0;

	intel_engine_pm_get(engine);
	intel_engine_park_heartbeat(engine);
}

static void engine_heartbeat_enable(struct intel_engine_cs *engine,
				    unsigned long saved)
static void engine_heartbeat_enable(struct intel_engine_cs *engine)
{
	intel_engine_pm_put(engine);

	engine->props.heartbeat_interval_ms = saved;
	engine->props.heartbeat_interval_ms =
		engine->defaults.heartbeat_interval_ms;
}

static int igt_hang_sanitycheck(void *arg)
@@ -473,7 +471,6 @@ static int igt_reset_nop_engine(void *arg)
	for_each_engine(engine, gt, id) {
		unsigned int reset_count, reset_engine_count, count;
		struct intel_context *ce;
		unsigned long heartbeat;
		IGT_TIMEOUT(end_time);
		int err;

@@ -485,7 +482,7 @@ static int igt_reset_nop_engine(void *arg)
		reset_engine_count = i915_reset_engine_count(global, engine);
		count = 0;

		engine_heartbeat_disable(engine, &heartbeat);
		engine_heartbeat_disable(engine);
		set_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
		do {
			int i;
@@ -529,7 +526,7 @@ static int igt_reset_nop_engine(void *arg)
			}
		} while (time_before(jiffies, end_time));
		clear_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
		engine_heartbeat_enable(engine, heartbeat);
		engine_heartbeat_enable(engine);

		pr_info("%s(%s): %d resets\n", __func__, engine->name, count);

@@ -564,7 +561,6 @@ static int __igt_reset_engine(struct intel_gt *gt, bool active)

	for_each_engine(engine, gt, id) {
		unsigned int reset_count, reset_engine_count;
		unsigned long heartbeat;
		IGT_TIMEOUT(end_time);

		if (active && !intel_engine_can_store_dword(engine))
@@ -580,7 +576,7 @@ static int __igt_reset_engine(struct intel_gt *gt, bool active)
		reset_count = i915_reset_count(global);
		reset_engine_count = i915_reset_engine_count(global, engine);

		engine_heartbeat_disable(engine, &heartbeat);
		engine_heartbeat_disable(engine);
		set_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
		do {
			if (active) {
@@ -632,7 +628,7 @@ static int __igt_reset_engine(struct intel_gt *gt, bool active)
			}
		} while (time_before(jiffies, end_time));
		clear_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
		engine_heartbeat_enable(engine, heartbeat);
		engine_heartbeat_enable(engine);

		if (err)
			break;
@@ -789,7 +785,6 @@ static int __igt_reset_engines(struct intel_gt *gt,
		struct active_engine threads[I915_NUM_ENGINES] = {};
		unsigned long device = i915_reset_count(global);
		unsigned long count = 0, reported;
		unsigned long heartbeat;
		IGT_TIMEOUT(end_time);

		if (flags & TEST_ACTIVE &&
@@ -832,7 +827,7 @@ static int __igt_reset_engines(struct intel_gt *gt,

		yield(); /* start all threads before we begin */

		engine_heartbeat_disable(engine, &heartbeat);
		engine_heartbeat_disable(engine);
		set_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
		do {
			struct i915_request *rq = NULL;
@@ -906,7 +901,7 @@ static int __igt_reset_engines(struct intel_gt *gt,
			}
		} while (time_before(jiffies, end_time));
		clear_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
		engine_heartbeat_enable(engine, heartbeat);
		engine_heartbeat_enable(engine);

		pr_info("i915_reset_engine(%s:%s): %lu resets\n",
			engine->name, test_name, count);
+23 −44
Original line number Diff line number Diff line
@@ -51,22 +51,20 @@ static struct i915_vma *create_scratch(struct intel_gt *gt)
	return vma;
}

static void engine_heartbeat_disable(struct intel_engine_cs *engine,
				     unsigned long *saved)
static void engine_heartbeat_disable(struct intel_engine_cs *engine)
{
	*saved = engine->props.heartbeat_interval_ms;
	engine->props.heartbeat_interval_ms = 0;

	intel_engine_pm_get(engine);
	intel_engine_park_heartbeat(engine);
}

static void engine_heartbeat_enable(struct intel_engine_cs *engine,
				    unsigned long saved)
static void engine_heartbeat_enable(struct intel_engine_cs *engine)
{
	intel_engine_pm_put(engine);

	engine->props.heartbeat_interval_ms = saved;
	engine->props.heartbeat_interval_ms =
		engine->defaults.heartbeat_interval_ms;
}

static bool is_active(struct i915_request *rq)
@@ -224,7 +222,6 @@ static int live_unlite_restore(struct intel_gt *gt, int prio)
		struct intel_context *ce[2] = {};
		struct i915_request *rq[2];
		struct igt_live_test t;
		unsigned long saved;
		int n;

		if (prio && !intel_engine_has_preemption(engine))
@@ -237,7 +234,7 @@ static int live_unlite_restore(struct intel_gt *gt, int prio)
			err = -EIO;
			break;
		}
		engine_heartbeat_disable(engine, &saved);
		engine_heartbeat_disable(engine);

		for (n = 0; n < ARRAY_SIZE(ce); n++) {
			struct intel_context *tmp;
@@ -345,7 +342,7 @@ err_ce:
			intel_context_put(ce[n]);
		}

		engine_heartbeat_enable(engine, saved);
		engine_heartbeat_enable(engine);
		if (igt_live_test_end(&t))
			err = -EIO;
		if (err)
@@ -466,7 +463,6 @@ static int live_hold_reset(void *arg)

	for_each_engine(engine, gt, id) {
		struct intel_context *ce;
		unsigned long heartbeat;
		struct i915_request *rq;

		ce = intel_context_create(engine);
@@ -475,7 +471,7 @@ static int live_hold_reset(void *arg)
			break;
		}

		engine_heartbeat_disable(engine, &heartbeat);
		engine_heartbeat_disable(engine);

		rq = igt_spinner_create_request(&spin, ce, MI_ARB_CHECK);
		if (IS_ERR(rq)) {
@@ -535,7 +531,7 @@ static int live_hold_reset(void *arg)
		i915_request_put(rq);

out:
		engine_heartbeat_enable(engine, heartbeat);
		engine_heartbeat_enable(engine);
		intel_context_put(ce);
		if (err)
			break;
@@ -580,10 +576,9 @@ static int live_error_interrupt(void *arg)

	for_each_engine(engine, gt, id) {
		const struct error_phase *p;
		unsigned long heartbeat;
		int err = 0;

		engine_heartbeat_disable(engine, &heartbeat);
		engine_heartbeat_disable(engine);

		for (p = phases; p->error[0] != GOOD; p++) {
			struct i915_request *client[ARRAY_SIZE(phases->error)];
@@ -682,7 +677,7 @@ out:
			}
		}

		engine_heartbeat_enable(engine, heartbeat);
		engine_heartbeat_enable(engine);
		if (err) {
			intel_gt_set_wedged(gt);
			return err;
@@ -895,16 +890,14 @@ static int live_timeslice_preempt(void *arg)
		enum intel_engine_id id;

		for_each_engine(engine, gt, id) {
			unsigned long saved;

			if (!intel_engine_has_preemption(engine))
				continue;

			memset(vaddr, 0, PAGE_SIZE);

			engine_heartbeat_disable(engine, &saved);
			engine_heartbeat_disable(engine);
			err = slice_semaphore_queue(engine, vma, count);
			engine_heartbeat_enable(engine, saved);
			engine_heartbeat_enable(engine);
			if (err)
				goto err_pin;

@@ -1009,7 +1002,6 @@ static int live_timeslice_rewind(void *arg)
		enum { X = 1, Z, Y };
		struct i915_request *rq[3] = {};
		struct intel_context *ce;
		unsigned long heartbeat;
		unsigned long timeslice;
		int i, err = 0;
		u32 *slot;
@@ -1028,7 +1020,7 @@ static int live_timeslice_rewind(void *arg)
		 * Expect execution/evaluation order XZY
		 */

		engine_heartbeat_disable(engine, &heartbeat);
		engine_heartbeat_disable(engine);
		timeslice = xchg(&engine->props.timeslice_duration_ms, 1);

		slot = memset32(engine->status_page.addr + 1000, 0, 4);
@@ -1122,7 +1114,7 @@ err:
		wmb();

		engine->props.timeslice_duration_ms = timeslice;
		engine_heartbeat_enable(engine, heartbeat);
		engine_heartbeat_enable(engine);
		for (i = 0; i < 3; i++)
			i915_request_put(rq[i]);
		if (igt_flush_test(gt->i915))
@@ -1202,12 +1194,11 @@ static int live_timeslice_queue(void *arg)
			.priority = I915_USER_PRIORITY(I915_PRIORITY_MAX),
		};
		struct i915_request *rq, *nop;
		unsigned long saved;

		if (!intel_engine_has_preemption(engine))
			continue;

		engine_heartbeat_disable(engine, &saved);
		engine_heartbeat_disable(engine);
		memset(vaddr, 0, PAGE_SIZE);

		/* ELSP[0]: semaphore wait */
@@ -1284,7 +1275,7 @@ static int live_timeslice_queue(void *arg)
err_rq:
		i915_request_put(rq);
err_heartbeat:
		engine_heartbeat_enable(engine, saved);
		engine_heartbeat_enable(engine);
		if (err)
			break;
	}
@@ -4153,7 +4144,6 @@ static int reset_virtual_engine(struct intel_gt *gt,
{
	struct intel_engine_cs *engine;
	struct intel_context *ve;
	unsigned long *heartbeat;
	struct igt_spinner spin;
	struct i915_request *rq;
	unsigned int n;
@@ -4165,15 +4155,9 @@ static int reset_virtual_engine(struct intel_gt *gt,
	 * descendents are not executed while the capture is in progress.
	 */

	heartbeat = kmalloc_array(nsibling, sizeof(*heartbeat), GFP_KERNEL);
	if (!heartbeat)
	if (igt_spinner_init(&spin, gt))
		return -ENOMEM;

	if (igt_spinner_init(&spin, gt)) {
		err = -ENOMEM;
		goto out_free;
	}

	ve = intel_execlists_create_virtual(siblings, nsibling);
	if (IS_ERR(ve)) {
		err = PTR_ERR(ve);
@@ -4181,7 +4165,7 @@ static int reset_virtual_engine(struct intel_gt *gt,
	}

	for (n = 0; n < nsibling; n++)
		engine_heartbeat_disable(siblings[n], &heartbeat[n]);
		engine_heartbeat_disable(siblings[n]);

	rq = igt_spinner_create_request(&spin, ve, MI_ARB_CHECK);
	if (IS_ERR(rq)) {
@@ -4252,13 +4236,11 @@ out_rq:
	i915_request_put(rq);
out_heartbeat:
	for (n = 0; n < nsibling; n++)
		engine_heartbeat_enable(siblings[n], heartbeat[n]);
		engine_heartbeat_enable(siblings[n]);

	intel_context_put(ve);
out_spin:
	igt_spinner_fini(&spin);
out_free:
	kfree(heartbeat);
	return err;
}

@@ -4932,9 +4914,7 @@ static int live_lrc_gpr(void *arg)
		return PTR_ERR(scratch);

	for_each_engine(engine, gt, id) {
		unsigned long heartbeat;

		engine_heartbeat_disable(engine, &heartbeat);
		engine_heartbeat_disable(engine);

		err = __live_lrc_gpr(engine, scratch, false);
		if (err)
@@ -4945,7 +4925,7 @@ static int live_lrc_gpr(void *arg)
			goto err;

err:
		engine_heartbeat_enable(engine, heartbeat);
		engine_heartbeat_enable(engine);
		if (igt_flush_test(gt->i915))
			err = -EIO;
		if (err)
@@ -5092,10 +5072,9 @@ static int live_lrc_timestamp(void *arg)
	 */

	for_each_engine(data.engine, gt, id) {
		unsigned long heartbeat;
		int i, err = 0;

		engine_heartbeat_disable(data.engine, &heartbeat);
		engine_heartbeat_disable(data.engine);

		for (i = 0; i < ARRAY_SIZE(data.ce); i++) {
			struct intel_context *tmp;
@@ -5128,7 +5107,7 @@ static int live_lrc_timestamp(void *arg)
		}

err:
		engine_heartbeat_enable(data.engine, heartbeat);
		engine_heartbeat_enable(data.engine);
		for (i = 0; i < ARRAY_SIZE(data.ce); i++) {
			if (!data.ce[i])
				break;
+28 −41
Original line number Diff line number Diff line
@@ -20,24 +20,20 @@
/* Try to isolate the impact of cstates from determing frequency response */
#define CPU_LATENCY 0 /* -1 to disable pm_qos, 0 to disable cstates */

static unsigned long engine_heartbeat_disable(struct intel_engine_cs *engine)
static void engine_heartbeat_disable(struct intel_engine_cs *engine)
{
	unsigned long old;

	old = fetch_and_zero(&engine->props.heartbeat_interval_ms);
	engine->props.heartbeat_interval_ms = 0;

	intel_engine_pm_get(engine);
	intel_engine_park_heartbeat(engine);

	return old;
}

static void engine_heartbeat_enable(struct intel_engine_cs *engine,
				    unsigned long saved)
static void engine_heartbeat_enable(struct intel_engine_cs *engine)
{
	intel_engine_pm_put(engine);

	engine->props.heartbeat_interval_ms = saved;
	engine->props.heartbeat_interval_ms =
		engine->defaults.heartbeat_interval_ms;
}

static void dummy_rps_work(struct work_struct *wrk)
@@ -246,7 +242,6 @@ int live_rps_clock_interval(void *arg)
	intel_gt_check_clock_frequency(gt);

	for_each_engine(engine, gt, id) {
		unsigned long saved_heartbeat;
		struct i915_request *rq;
		u32 cycles;
		u64 dt;
@@ -254,13 +249,13 @@ int live_rps_clock_interval(void *arg)
		if (!intel_engine_can_store_dword(engine))
			continue;

		saved_heartbeat = engine_heartbeat_disable(engine);
		engine_heartbeat_disable(engine);

		rq = igt_spinner_create_request(&spin,
						engine->kernel_context,
						MI_NOOP);
		if (IS_ERR(rq)) {
			engine_heartbeat_enable(engine, saved_heartbeat);
			engine_heartbeat_enable(engine);
			err = PTR_ERR(rq);
			break;
		}
@@ -271,7 +266,7 @@ int live_rps_clock_interval(void *arg)
			pr_err("%s: RPS spinner did not start\n",
			       engine->name);
			igt_spinner_end(&spin);
			engine_heartbeat_enable(engine, saved_heartbeat);
			engine_heartbeat_enable(engine);
			intel_gt_set_wedged(engine->gt);
			err = -EIO;
			break;
@@ -327,7 +322,7 @@ int live_rps_clock_interval(void *arg)
		intel_uncore_forcewake_put(gt->uncore, FORCEWAKE_ALL);

		igt_spinner_end(&spin);
		engine_heartbeat_enable(engine, saved_heartbeat);
		engine_heartbeat_enable(engine);

		if (err == 0) {
			u64 time = intel_gt_pm_interval_to_ns(gt, cycles);
@@ -405,7 +400,6 @@ int live_rps_control(void *arg)

	intel_gt_pm_get(gt);
	for_each_engine(engine, gt, id) {
		unsigned long saved_heartbeat;
		struct i915_request *rq;
		ktime_t min_dt, max_dt;
		int f, limit;
@@ -414,7 +408,7 @@ int live_rps_control(void *arg)
		if (!intel_engine_can_store_dword(engine))
			continue;

		saved_heartbeat = engine_heartbeat_disable(engine);
		engine_heartbeat_disable(engine);

		rq = igt_spinner_create_request(&spin,
						engine->kernel_context,
@@ -430,7 +424,7 @@ int live_rps_control(void *arg)
			pr_err("%s: RPS spinner did not start\n",
			       engine->name);
			igt_spinner_end(&spin);
			engine_heartbeat_enable(engine, saved_heartbeat);
			engine_heartbeat_enable(engine);
			intel_gt_set_wedged(engine->gt);
			err = -EIO;
			break;
@@ -440,7 +434,7 @@ int live_rps_control(void *arg)
			pr_err("%s: could not set minimum frequency [%x], only %x!\n",
			       engine->name, rps->min_freq, read_cagf(rps));
			igt_spinner_end(&spin);
			engine_heartbeat_enable(engine, saved_heartbeat);
			engine_heartbeat_enable(engine);
			show_pstate_limits(rps);
			err = -EINVAL;
			break;
@@ -457,7 +451,7 @@ int live_rps_control(void *arg)
			pr_err("%s: could not restore minimum frequency [%x], only %x!\n",
			       engine->name, rps->min_freq, read_cagf(rps));
			igt_spinner_end(&spin);
			engine_heartbeat_enable(engine, saved_heartbeat);
			engine_heartbeat_enable(engine);
			show_pstate_limits(rps);
			err = -EINVAL;
			break;
@@ -472,7 +466,7 @@ int live_rps_control(void *arg)
		min_dt = ktime_sub(ktime_get(), min_dt);

		igt_spinner_end(&spin);
		engine_heartbeat_enable(engine, saved_heartbeat);
		engine_heartbeat_enable(engine);

		pr_info("%s: range:[%x:%uMHz, %x:%uMHz] limit:[%x:%uMHz], %x:%x response %lluns:%lluns\n",
			engine->name,
@@ -635,7 +629,6 @@ int live_rps_frequency_cs(void *arg)
	rps->work.func = dummy_rps_work;

	for_each_engine(engine, gt, id) {
		unsigned long saved_heartbeat;
		struct i915_request *rq;
		struct i915_vma *vma;
		u32 *cancel, *cntr;
@@ -644,14 +637,14 @@ int live_rps_frequency_cs(void *arg)
			int freq;
		} min, max;

		saved_heartbeat = engine_heartbeat_disable(engine);
		engine_heartbeat_disable(engine);

		vma = create_spin_counter(engine,
					  engine->kernel_context->vm, false,
					  &cancel, &cntr);
		if (IS_ERR(vma)) {
			err = PTR_ERR(vma);
			engine_heartbeat_enable(engine, saved_heartbeat);
			engine_heartbeat_enable(engine);
			break;
		}

@@ -732,7 +725,7 @@ err_vma:
		i915_vma_unpin(vma);
		i915_vma_put(vma);

		engine_heartbeat_enable(engine, saved_heartbeat);
		engine_heartbeat_enable(engine);
		if (igt_flush_test(gt->i915))
			err = -EIO;
		if (err)
@@ -778,7 +771,6 @@ int live_rps_frequency_srm(void *arg)
	rps->work.func = dummy_rps_work;

	for_each_engine(engine, gt, id) {
		unsigned long saved_heartbeat;
		struct i915_request *rq;
		struct i915_vma *vma;
		u32 *cancel, *cntr;
@@ -787,14 +779,14 @@ int live_rps_frequency_srm(void *arg)
			int freq;
		} min, max;

		saved_heartbeat = engine_heartbeat_disable(engine);
		engine_heartbeat_disable(engine);

		vma = create_spin_counter(engine,
					  engine->kernel_context->vm, true,
					  &cancel, &cntr);
		if (IS_ERR(vma)) {
			err = PTR_ERR(vma);
			engine_heartbeat_enable(engine, saved_heartbeat);
			engine_heartbeat_enable(engine);
			break;
		}

@@ -874,7 +866,7 @@ err_vma:
		i915_vma_unpin(vma);
		i915_vma_put(vma);

		engine_heartbeat_enable(engine, saved_heartbeat);
		engine_heartbeat_enable(engine);
		if (igt_flush_test(gt->i915))
			err = -EIO;
		if (err)
@@ -1066,16 +1058,14 @@ int live_rps_interrupt(void *arg)
	for_each_engine(engine, gt, id) {
		/* Keep the engine busy with a spinner; expect an UP! */
		if (pm_events & GEN6_PM_RP_UP_THRESHOLD) {
			unsigned long saved_heartbeat;

			intel_gt_pm_wait_for_idle(engine->gt);
			GEM_BUG_ON(intel_rps_is_active(rps));

			saved_heartbeat = engine_heartbeat_disable(engine);
			engine_heartbeat_disable(engine);

			err = __rps_up_interrupt(rps, engine, &spin);

			engine_heartbeat_enable(engine, saved_heartbeat);
			engine_heartbeat_enable(engine);
			if (err)
				goto out;

@@ -1084,15 +1074,13 @@ int live_rps_interrupt(void *arg)

		/* Keep the engine awake but idle and check for DOWN */
		if (pm_events & GEN6_PM_RP_DOWN_THRESHOLD) {
			unsigned long saved_heartbeat;

			saved_heartbeat = engine_heartbeat_disable(engine);
			engine_heartbeat_disable(engine);
			intel_rc6_disable(&gt->rc6);

			err = __rps_down_interrupt(rps, engine);

			intel_rc6_enable(&gt->rc6);
			engine_heartbeat_enable(engine, saved_heartbeat);
			engine_heartbeat_enable(engine);
			if (err)
				goto out;
		}
@@ -1168,7 +1156,6 @@ int live_rps_power(void *arg)
	rps->work.func = dummy_rps_work;

	for_each_engine(engine, gt, id) {
		unsigned long saved_heartbeat;
		struct i915_request *rq;
		struct {
			u64 power;
@@ -1178,13 +1165,13 @@ int live_rps_power(void *arg)
		if (!intel_engine_can_store_dword(engine))
			continue;

		saved_heartbeat = engine_heartbeat_disable(engine);
		engine_heartbeat_disable(engine);

		rq = igt_spinner_create_request(&spin,
						engine->kernel_context,
						MI_NOOP);
		if (IS_ERR(rq)) {
			engine_heartbeat_enable(engine, saved_heartbeat);
			engine_heartbeat_enable(engine);
			err = PTR_ERR(rq);
			break;
		}
@@ -1195,7 +1182,7 @@ int live_rps_power(void *arg)
			pr_err("%s: RPS spinner did not start\n",
			       engine->name);
			igt_spinner_end(&spin);
			engine_heartbeat_enable(engine, saved_heartbeat);
			engine_heartbeat_enable(engine);
			intel_gt_set_wedged(engine->gt);
			err = -EIO;
			break;
@@ -1208,7 +1195,7 @@ int live_rps_power(void *arg)
		min.power = measure_power_at(rps, &min.freq);

		igt_spinner_end(&spin);
		engine_heartbeat_enable(engine, saved_heartbeat);
		engine_heartbeat_enable(engine);

		pr_info("%s: min:%llumW @ %uMHz, max:%llumW @ %uMHz\n",
			engine->name,
+6 −9
Original line number Diff line number Diff line
@@ -751,22 +751,20 @@ out_free:
	return err;
}

static void engine_heartbeat_disable(struct intel_engine_cs *engine,
				     unsigned long *saved)
static void engine_heartbeat_disable(struct intel_engine_cs *engine)
{
	*saved = engine->props.heartbeat_interval_ms;
	engine->props.heartbeat_interval_ms = 0;

	intel_engine_pm_get(engine);
	intel_engine_park_heartbeat(engine);
}

static void engine_heartbeat_enable(struct intel_engine_cs *engine,
				    unsigned long saved)
static void engine_heartbeat_enable(struct intel_engine_cs *engine)
{
	intel_engine_pm_put(engine);

	engine->props.heartbeat_interval_ms = saved;
	engine->props.heartbeat_interval_ms =
		engine->defaults.heartbeat_interval_ms;
}

static int live_hwsp_rollover_kernel(void *arg)
@@ -785,10 +783,9 @@ static int live_hwsp_rollover_kernel(void *arg)
		struct intel_context *ce = engine->kernel_context;
		struct intel_timeline *tl = ce->timeline;
		struct i915_request *rq[3] = {};
		unsigned long heartbeat;
		int i;

		engine_heartbeat_disable(engine, &heartbeat);
		engine_heartbeat_disable(engine);
		if (intel_gt_wait_for_idle(gt, HZ / 2)) {
			err = -EIO;
			goto out;
@@ -839,7 +836,7 @@ static int live_hwsp_rollover_kernel(void *arg)
out:
		for (i = 0; i < ARRAY_SIZE(rq); i++)
			i915_request_put(rq[i]);
		engine_heartbeat_enable(engine, heartbeat);
		engine_heartbeat_enable(engine);
		if (err)
			break;
	}