Skip to content

Commit 74e4b90

Browse files
gfxstranddanvet
authored andcommitted
drm/i915: Stop storing the ring size in the ring pointer (v3)
Previously, we were storing the ring size in the ring pointer before it was actually allocated. We would then guard setting the ring size on checking for CONTEXT_ALLOC_BIT. This is error-prone at best and really only saves us a few bytes on something that already burns at least 4K. Instead, this patch adds a new ring_size field and makes everything use that. v2 (Daniel Vetter): - Replace 512 * SZ_4K with SZ_2M v2 (Jason Ekstrand): - Rebase on top of page migration code Signed-off-by: Jason Ekstrand <[email protected]> Reviewed-by: Daniel Vetter <[email protected]> Signed-off-by: Daniel Vetter <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent fe4751c commit 74e4b90

File tree

11 files changed

+14
-19
lines changed

11 files changed

+14
-19
lines changed

drivers/gpu/drm/i915/gem/i915_gem_context.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,8 +211,7 @@ static void intel_context_set_gem(struct intel_context *ce,
211211
GEM_BUG_ON(rcu_access_pointer(ce->gem_context));
212212
RCU_INIT_POINTER(ce->gem_context, ctx);
213213

214-
if (!test_bit(CONTEXT_ALLOC_BIT, &ce->flags))
215-
ce->ring = __intel_context_ring_size(SZ_16K);
214+
ce->ring_size = SZ_16K;
216215

217216
if (rcu_access_pointer(ctx->vm)) {
218217
struct i915_address_space *vm;

drivers/gpu/drm/i915/gt/intel_context.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,8 @@ intel_context_init(struct intel_context *ce, struct intel_engine_cs *engine)
371371
ce->engine = engine;
372372
ce->ops = engine->cops;
373373
ce->sseu = engine->sseu;
374-
ce->ring = __intel_context_ring_size(SZ_4K);
374+
ce->ring = NULL;
375+
ce->ring_size = SZ_4K;
375376

376377
ewma_runtime_init(&ce->runtime.avg);
377378

drivers/gpu/drm/i915/gt/intel_context.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -175,11 +175,6 @@ int intel_context_prepare_remote_request(struct intel_context *ce,
175175

176176
struct i915_request *intel_context_create_request(struct intel_context *ce);
177177

178-
static inline struct intel_ring *__intel_context_ring_size(u64 sz)
179-
{
180-
return u64_to_ptr(struct intel_ring, sz);
181-
}
182-
183178
static inline bool intel_context_is_barrier(const struct intel_context *ce)
184179
{
185180
return test_bit(CONTEXT_BARRIER_BIT, &ce->flags);

drivers/gpu/drm/i915/gt/intel_context_types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ struct intel_context {
8282
spinlock_t signal_lock; /* protects signals, the list of requests */
8383

8484
struct i915_vma *state;
85+
u32 ring_size;
8586
struct intel_ring *ring;
8687
struct intel_timeline *timeline;
8788

drivers/gpu/drm/i915/gt/intel_engine_cs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -807,7 +807,8 @@ intel_engine_create_pinned_context(struct intel_engine_cs *engine,
807807

808808
__set_bit(CONTEXT_BARRIER_BIT, &ce->flags);
809809
ce->timeline = page_pack_bits(NULL, hwsp);
810-
ce->ring = __intel_context_ring_size(ring_size);
810+
ce->ring = NULL;
811+
ce->ring_size = ring_size;
811812

812813
i915_vm_put(ce->vm);
813814
ce->vm = i915_vm_get(vm);

drivers/gpu/drm/i915/gt/intel_lrc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -845,7 +845,7 @@ int lrc_alloc(struct intel_context *ce, struct intel_engine_cs *engine)
845845
if (IS_ERR(vma))
846846
return PTR_ERR(vma);
847847

848-
ring = intel_engine_create_ring(engine, (unsigned long)ce->ring);
848+
ring = intel_engine_create_ring(engine, ce->ring_size);
849849
if (IS_ERR(ring)) {
850850
err = PTR_ERR(ring);
851851
goto err_vma;

drivers/gpu/drm/i915/gt/intel_migrate.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,8 @@ struct intel_context *intel_migrate_create_context(struct intel_migrate *m)
232232
if (IS_ERR(ce))
233233
return ce;
234234

235-
ce->ring = __intel_context_ring_size(SZ_256K);
235+
ce->ring = NULL;
236+
ce->ring_size = SZ_256K;
236237

237238
i915_vm_put(ce->vm);
238239
ce->vm = i915_vm_get(m->context->vm);

drivers/gpu/drm/i915/gt/selftest_execlists.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2810,7 +2810,7 @@ static int __live_preempt_ring(struct intel_engine_cs *engine,
28102810
goto err_ce;
28112811
}
28122812

2813-
tmp->ring = __intel_context_ring_size(ring_sz);
2813+
tmp->ring_size = ring_sz;
28142814

28152815
err = intel_context_pin(tmp);
28162816
if (err) {

drivers/gpu/drm/i915/gt/selftest_mocs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ static struct intel_context *mocs_context_create(struct intel_engine_cs *engine)
2828
return ce;
2929

3030
/* We build large requests to read the registers from the ring */
31-
ce->ring = __intel_context_ring_size(SZ_16K);
31+
ce->ring_size = SZ_16K;
3232

3333
return ce;
3434
}

drivers/gpu/drm/i915/gt/selftest_timeline.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -874,7 +874,7 @@ static int create_watcher(struct hwsp_watcher *w,
874874
if (IS_ERR(ce))
875875
return PTR_ERR(ce);
876876

877-
ce->ring = __intel_context_ring_size(ringsz);
877+
ce->ring_size = ringsz;
878878
w->rq = intel_context_create_request(ce);
879879
intel_context_put(ce);
880880
if (IS_ERR(w->rq))

0 commit comments

Comments
 (0)