All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mika Kuoppala <mika.kuoppala@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Subject: Re: [Intel-gfx] [PATCH 03/12] drm/i915/selftests: Restore to default heartbeat
Date: Tue, 19 May 2020 16:41:36 +0300	[thread overview]
Message-ID: <87mu6459f3.fsf@gaia.fi.intel.com> (raw)
In-Reply-To: <20200519063123.20673-3-chris@chris-wilson.co.uk>

Chris Wilson <chris@chris-wilson.co.uk> writes:

> 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: Chris Wilson <chris@chris-wilson.co.uk>
> ---

Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>

>  drivers/gpu/drm/i915/gt/selftest_hangcheck.c | 25 +++----
>  drivers/gpu/drm/i915/gt/selftest_lrc.c       | 67 +++++++------------
>  drivers/gpu/drm/i915/gt/selftest_rps.c       | 69 ++++++++------------
>  drivers/gpu/drm/i915/gt/selftest_timeline.c  | 15 ++---
>  4 files changed, 67 insertions(+), 109 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> index 2b2efff6e19d..4aa4cc917d8b 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> @@ -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);
> diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c b/drivers/gpu/drm/i915/gt/selftest_lrc.c
> index 3e042fa4b94b..b71f04db9c6e 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_lrc.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c
> @@ -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 @@ static int live_unlite_restore(struct intel_gt *gt, int prio)
>  			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 @@ static int live_error_interrupt(void *arg)
>  			}
>  		}
>  
> -		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 @@ static int live_timeslice_rewind(void *arg)
>  		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;
>  	}
> @@ -4145,7 +4136,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;
> @@ -4157,15 +4147,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);
> @@ -4173,7 +4157,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)) {
> @@ -4244,13 +4228,11 @@ static int reset_virtual_engine(struct intel_gt *gt,
>  	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;
>  }
>  
> @@ -4918,9 +4900,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)
> @@ -4931,7 +4911,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)
> @@ -5078,10 +5058,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;
> @@ -5114,7 +5093,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;
> diff --git a/drivers/gpu/drm/i915/gt/selftest_rps.c b/drivers/gpu/drm/i915/gt/selftest_rps.c
> index 6275d69aa9cc..5049c3dd08a6 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_rps.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_rps.c
> @@ -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 @@ int live_rps_frequency_cs(void *arg)
>  		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 @@ int live_rps_frequency_srm(void *arg)
>  		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,
> diff --git a/drivers/gpu/drm/i915/gt/selftest_timeline.c b/drivers/gpu/drm/i915/gt/selftest_timeline.c
> index c2578a0f2f14..ef1c35073dc0 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_timeline.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_timeline.c
> @@ -751,22 +751,20 @@ static int live_hwsp_wrap(void *arg)
>  	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;
>  	}
> -- 
> 2.20.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2020-05-19 13:43 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-19  6:31 [Intel-gfx] [PATCH 01/12] drm/i915: Don't set queue-priority hint when supressing the reschedule Chris Wilson
2020-05-19  6:31 ` [Intel-gfx] [PATCH 02/12] drm/i915/selftests: Change priority overflow detection Chris Wilson
2020-05-19 13:58   ` Mika Kuoppala
2020-05-19  6:31 ` [Intel-gfx] [PATCH 03/12] drm/i915/selftests: Restore to default heartbeat Chris Wilson
2020-05-19 13:41   ` Mika Kuoppala [this message]
2020-05-19  6:31 ` [Intel-gfx] [PATCH 04/12] drm/i915/selftests: Check for an initial-breadcrumb in wait_for_submit() Chris Wilson
2020-05-19 14:20   ` Mika Kuoppala
2020-05-19  6:31 ` [Intel-gfx] [PATCH 05/12] drm/i915/execlists: Shortcircuit queue_prio() for no internal levels Chris Wilson
2020-05-19  6:31 ` [Intel-gfx] [PATCH 06/12] drm/i915: Move saturated workload detection back to the context Chris Wilson
2020-05-19  6:31 ` [Intel-gfx] [PATCH 07/12] drm/i915/selftests: Add tests for timeslicing virtual engines Chris Wilson
2020-05-19  9:39   ` Tvrtko Ursulin
2020-05-19  6:31 ` [Intel-gfx] [PATCH 08/12] drm/i915/gt: Kick virtual siblings on timeslice out Chris Wilson
2020-05-19  6:31 ` [Intel-gfx] [PATCH 09/12] drm/i915/gt: Incorporate the virtual engine into timeslicing Chris Wilson
2020-05-19  9:40   ` Tvrtko Ursulin
2020-05-19  6:31 ` [Intel-gfx] [PATCH 10/12] drm/i915/gt: Use virtual_engine during execlists_dequeue Chris Wilson
2020-05-19  6:31 ` [Intel-gfx] [PATCH 11/12] drm/i915/gt: Decouple inflight virtual engines Chris Wilson
2020-05-19  6:31 ` [Intel-gfx] [PATCH 12/12] drm/i915/gt: Resubmit the virtual engine on schedule-out Chris Wilson
2020-05-19  7:15 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [01/12] drm/i915: Don't set queue-priority hint when supressing the reschedule Patchwork
2020-05-19  7:16 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2020-05-19  7:40 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2020-05-19  9:21 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2020-05-19 13:38 ` [Intel-gfx] [PATCH 01/12] " Mika Kuoppala

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87mu6459f3.fsf@gaia.fi.intel.com \
    --to=mika.kuoppala@linux.intel.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.