mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-22 00:09:45 +07:00
drm/i915/selftests: Disable heartbeat around manual pulse tests
Still chasing the mystery of the stray idle flush, let's ensure that the heartbeat does not run at the same time as our test and confuse us. References: https://gitlab.freedesktop.org/drm/intel/issues/541 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Andi Shyti <andi.shyti@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200227085723.1961649-8-chris@chris-wilson.co.uk
This commit is contained in:
parent
c0e3101882
commit
950da30162
@ -142,6 +142,24 @@ static int __live_idle_pulse(struct intel_engine_cs *engine,
|
||||
return err;
|
||||
}
|
||||
|
||||
static void engine_heartbeat_disable(struct intel_engine_cs *engine,
|
||||
unsigned long *saved)
|
||||
{
|
||||
*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)
|
||||
{
|
||||
intel_engine_pm_put(engine);
|
||||
|
||||
engine->props.heartbeat_interval_ms = saved;
|
||||
}
|
||||
|
||||
static int live_idle_flush(void *arg)
|
||||
{
|
||||
struct intel_gt *gt = arg;
|
||||
@ -152,9 +170,11 @@ static int live_idle_flush(void *arg)
|
||||
/* Check that we can flush the idle barriers */
|
||||
|
||||
for_each_engine(engine, gt, id) {
|
||||
intel_engine_pm_get(engine);
|
||||
unsigned long heartbeat;
|
||||
|
||||
engine_heartbeat_disable(engine, &heartbeat);
|
||||
err = __live_idle_pulse(engine, intel_engine_flush_barriers);
|
||||
intel_engine_pm_put(engine);
|
||||
engine_heartbeat_enable(engine, heartbeat);
|
||||
if (err)
|
||||
break;
|
||||
}
|
||||
@ -172,9 +192,11 @@ static int live_idle_pulse(void *arg)
|
||||
/* Check that heartbeat pulses flush the idle barriers */
|
||||
|
||||
for_each_engine(engine, gt, id) {
|
||||
intel_engine_pm_get(engine);
|
||||
unsigned long heartbeat;
|
||||
|
||||
engine_heartbeat_disable(engine, &heartbeat);
|
||||
err = __live_idle_pulse(engine, intel_engine_pulse);
|
||||
intel_engine_pm_put(engine);
|
||||
engine_heartbeat_enable(engine, heartbeat);
|
||||
if (err && err != -ENODEV)
|
||||
break;
|
||||
|
||||
|
@ -331,8 +331,7 @@ void i915_active_unlock_wait(struct i915_active *ref)
|
||||
}
|
||||
|
||||
/* And wait for the retire callback */
|
||||
spin_lock_irq(&ref->tree_lock);
|
||||
spin_unlock_irq(&ref->tree_lock);
|
||||
spin_unlock_wait(&ref->tree_lock);
|
||||
|
||||
/* ... which may have been on a thread instead */
|
||||
flush_work(&ref->work);
|
||||
|
Loading…
Reference in New Issue
Block a user