[PATCH 62/94] heart
Chris Wilson
chris at chris-wilson.co.uk
Sun Jul 26 17:41:03 UTC 2020
---
drivers/gpu/drm/i915/gt/intel_engine_heartbeat.c | 7 ++++---
drivers/gpu/drm/i915/gt/intel_engine_heartbeat.h | 4 +++-
drivers/gpu/drm/i915/gt/selftest_context.c | 2 +-
drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c | 7 ++++++-
drivers/gpu/drm/i915/i915_active.c | 2 +-
drivers/gpu/drm/i915/i915_vma.c | 2 +-
6 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/gt/intel_engine_heartbeat.c b/drivers/gpu/drm/i915/gt/intel_engine_heartbeat.c
index 5a0196dc5716..641cc792f729 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_heartbeat.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_heartbeat.c
@@ -258,7 +258,7 @@ int intel_engine_pulse(struct intel_engine_cs *engine)
return err;
}
-int intel_engine_flush_barriers(struct intel_engine_cs *engine)
+int intel_engine_flush_barriers(struct intel_engine_cs *engine, gfp_t gfp)
{
struct intel_context *ce = engine->kernel_context;
struct i915_request *rq;
@@ -270,12 +270,13 @@ int intel_engine_flush_barriers(struct intel_engine_cs *engine)
if (!intel_engine_pm_get_if_awake(engine))
return 0;
- if (mutex_lock_interruptible(&ce->timeline->mutex)) {
+ if (mutex_lock_interruptible_nested(&ce->timeline->mutex,
+ !gfpflags_allow_blocking(gfp))) {
err = -EINTR;
goto out_rpm;
}
- rq = heartbeat_create(ce, GFP_KERNEL);
+ rq = heartbeat_create(ce, gfp);
if (IS_ERR(rq)) {
err = PTR_ERR(rq);
goto out_unlock;
diff --git a/drivers/gpu/drm/i915/gt/intel_engine_heartbeat.h b/drivers/gpu/drm/i915/gt/intel_engine_heartbeat.h
index a7b8c0f9e005..996e12e7ccf8 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_heartbeat.h
+++ b/drivers/gpu/drm/i915/gt/intel_engine_heartbeat.h
@@ -7,6 +7,8 @@
#ifndef INTEL_ENGINE_HEARTBEAT_H
#define INTEL_ENGINE_HEARTBEAT_H
+#include <linux/gfp.h>
+
struct intel_engine_cs;
void intel_engine_init_heartbeat(struct intel_engine_cs *engine);
@@ -18,6 +20,6 @@ void intel_engine_park_heartbeat(struct intel_engine_cs *engine);
void intel_engine_unpark_heartbeat(struct intel_engine_cs *engine);
int intel_engine_pulse(struct intel_engine_cs *engine);
-int intel_engine_flush_barriers(struct intel_engine_cs *engine);
+int intel_engine_flush_barriers(struct intel_engine_cs *engine, gfp_t gfp);
#endif /* INTEL_ENGINE_HEARTBEAT_H */
diff --git a/drivers/gpu/drm/i915/gt/selftest_context.c b/drivers/gpu/drm/i915/gt/selftest_context.c
index 1f4020e906a8..e97e522f947b 100644
--- a/drivers/gpu/drm/i915/gt/selftest_context.c
+++ b/drivers/gpu/drm/i915/gt/selftest_context.c
@@ -261,7 +261,7 @@ static int __live_active_context(struct intel_engine_cs *engine)
}
/* Now make sure our idle-barriers are flushed */
- err = intel_engine_flush_barriers(engine);
+ err = intel_engine_flush_barriers(engine, GFP_KERNEL);
if (err)
goto err;
diff --git a/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c b/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c
index e73854dd2fe0..d22a7956c9a5 100644
--- a/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c
+++ b/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c
@@ -146,6 +146,11 @@ static int __live_idle_pulse(struct intel_engine_cs *engine,
return err;
}
+static int flush_barriers(struct intel_engine_cs *engine)
+{
+ return intel_engine_flush_barriers(engine, GFP_KERNEL);
+}
+
static int live_idle_flush(void *arg)
{
struct intel_gt *gt = arg;
@@ -157,7 +162,7 @@ static int live_idle_flush(void *arg)
for_each_engine(engine, gt, id) {
st_engine_heartbeat_disable(engine);
- err = __live_idle_pulse(engine, intel_engine_flush_barriers);
+ err = __live_idle_pulse(engine, flush_barriers);
st_engine_heartbeat_enable(engine);
if (err)
break;
diff --git a/drivers/gpu/drm/i915/i915_active.c b/drivers/gpu/drm/i915/i915_active.c
index 00d033a435f4..805901bb719c 100644
--- a/drivers/gpu/drm/i915/i915_active.c
+++ b/drivers/gpu/drm/i915/i915_active.c
@@ -600,7 +600,7 @@ static int flush_barrier(struct active_node *it)
if (!is_barrier(&it->base))
return 0;
- return intel_engine_flush_barriers(engine);
+ return intel_engine_flush_barriers(engine, GFP_KERNEL);
}
static int flush_lazy_signals(struct i915_active *ref)
diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
index 1f198c93c1a6..3032777f676b 100644
--- a/drivers/gpu/drm/i915/i915_vma.c
+++ b/drivers/gpu/drm/i915/i915_vma.c
@@ -993,7 +993,7 @@ static int unpin_idle_contexts(struct intel_gt *gt)
struct intel_context *ce = engine->kernel_context;
struct intel_timeline *tl = ce->timeline;
- intel_engine_flush_barriers(engine);
+ intel_engine_flush_barriers(engine, GFP_NOWAIT | __GFP_NOWARN);
if (atomic_read(&tl->active_count))
err = 0;
}
--
2.20.1
More information about the Intel-gfx-trybot
mailing list