diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2019-08-09 19:25:17 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2019-08-09 20:18:30 +0100 |
commit | 48ae397b6b935c6733f15476c338df27eac9293c (patch) | |
tree | f6e892b3dd01392dbf819fa4f3a4c9d4dabe3b0e /drivers/gpu/drm/i915/gt | |
parent | 4c60b1aaa255207eea2892d2d55b718db90d1ad8 (diff) |
drm/i915: Push the ring creation flags to the backend
Push the ring creation flags from the outer GEM context to the inner
intel_context to avoid an unsightly back-reference from inside the
backend.
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/20190809182518.20486-3-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu/drm/i915/gt')
-rw-r--r-- | drivers/gpu/drm/i915/gt/intel_context.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/gt/intel_context.h | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/gt/intel_engine_cs.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/gt/intel_lrc.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/gt/intel_ringbuffer.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/gt/mock_engine.c | 2 |
6 files changed, 12 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/gt/intel_context.c b/drivers/gpu/drm/i915/gt/intel_context.c index 41d38e661de7..6d1d4e8dbfc9 100644 --- a/drivers/gpu/drm/i915/gt/intel_context.c +++ b/drivers/gpu/drm/i915/gt/intel_context.c @@ -222,6 +222,7 @@ intel_context_init(struct intel_context *ce, ce->engine = engine; ce->ops = engine->cops; ce->sseu = engine->sseu; + ce->ring = __intel_context_ring_size(SZ_16K); INIT_LIST_HEAD(&ce->signal_link); INIT_LIST_HEAD(&ce->signals); diff --git a/drivers/gpu/drm/i915/gt/intel_context.h b/drivers/gpu/drm/i915/gt/intel_context.h index 07f9924de48f..13f28dd316bc 100644 --- a/drivers/gpu/drm/i915/gt/intel_context.h +++ b/drivers/gpu/drm/i915/gt/intel_context.h @@ -136,4 +136,9 @@ int intel_context_prepare_remote_request(struct intel_context *ce, struct i915_request *intel_context_create_request(struct intel_context *ce); +static inline struct intel_ring *__intel_context_ring_size(u64 sz) +{ + return u64_to_ptr(struct intel_ring, sz); +} + #endif /* __INTEL_CONTEXT_H__ */ diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c index 634ef45b77da..ece731ab7b3a 100644 --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c @@ -738,6 +738,8 @@ create_kernel_context(struct intel_engine_cs *engine) if (IS_ERR(ce)) return ce; + ce->ring = __intel_context_ring_size(SZ_4K); + err = intel_context_pin(ce); if (err) { intel_context_put(ce); diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c index a986ea87fbd9..fc5fcc2d03ac 100644 --- a/drivers/gpu/drm/i915/gt/intel_lrc.c +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c @@ -3115,9 +3115,8 @@ static int __execlists_context_alloc(struct intel_context *ce, goto error_deref_obj; } - ring = intel_engine_create_ring(engine, - timeline, - ce->gem_context->ring_size); + ring = intel_engine_create_ring(engine, timeline, + (unsigned long)ce->ring); intel_timeline_put(timeline); if (IS_ERR(ring)) { ret = PTR_ERR(ring); diff --git a/drivers/gpu/drm/i915/gt/intel_ringbuffer.c b/drivers/gpu/drm/i915/gt/intel_ringbuffer.c index 6a2892033457..d5b7e4dde762 100644 --- a/drivers/gpu/drm/i915/gt/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/gt/intel_ringbuffer.c @@ -2350,7 +2350,7 @@ int intel_ring_submission_init(struct intel_engine_cs *engine) } GEM_BUG_ON(timeline->has_initial_breadcrumb); - ring = intel_engine_create_ring(engine, timeline, 32 * PAGE_SIZE); + ring = intel_engine_create_ring(engine, timeline, SZ_16K); intel_timeline_put(timeline); if (IS_ERR(ring)) { err = PTR_ERR(ring); diff --git a/drivers/gpu/drm/i915/gt/mock_engine.c b/drivers/gpu/drm/i915/gt/mock_engine.c index 848a83a38b08..79baed1aaf38 100644 --- a/drivers/gpu/drm/i915/gt/mock_engine.c +++ b/drivers/gpu/drm/i915/gt/mock_engine.c @@ -140,7 +140,7 @@ static void mock_context_destroy(struct kref *ref) GEM_BUG_ON(intel_context_is_pinned(ce)); - if (ce->ring) + if (test_bit(CONTEXT_ALLOC_BIT, &ce->flags)) mock_ring_free(ce->ring); intel_context_fini(ce); |