[PATCH 2/2] Revert "drm/i915/gt: Incrementally check for rewinding"
Chris Wilson
chris at chris-wilson.co.uk
Mon Jun 15 21:08:12 UTC 2020
This reverts commit e36ba817fa966f81fb1c8d16f3721b5a644b2fa9.
---
drivers/gpu/drm/i915/gt/intel_engine_cs.c | 4 +-
drivers/gpu/drm/i915/gt/intel_lrc.c | 21 +---
drivers/gpu/drm/i915/gt/intel_ring.c | 4 -
drivers/gpu/drm/i915/gt/selftest_mocs.c | 18 +--
drivers/gpu/drm/i915/gt/selftest_ring.c | 110 ------------------
.../drm/i915/selftests/i915_mock_selftests.h | 1 -
6 files changed, 4 insertions(+), 154 deletions(-)
delete mode 100644 drivers/gpu/drm/i915/gt/selftest_ring.c
diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
index 045179c65c44..5c893491309f 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
@@ -646,7 +646,7 @@ static int engine_setup_common(struct intel_engine_cs *engine)
struct measure_breadcrumb {
struct i915_request rq;
struct intel_ring ring;
- u32 cs[2048];
+ u32 cs[1024];
};
static int measure_breadcrumb_dw(struct intel_context *ce)
@@ -667,8 +667,6 @@ static int measure_breadcrumb_dw(struct intel_context *ce)
frame->ring.vaddr = frame->cs;
frame->ring.size = sizeof(frame->cs);
- frame->ring.wrap =
- BITS_PER_TYPE(frame->ring.size) - ilog2(frame->ring.size);
frame->ring.effective_size = frame->ring.size;
intel_ring_update_space(&frame->ring);
frame->rq.ring = &frame->ring;
diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c
index e866b8d721ed..a991d6e7183e 100644
--- a/drivers/gpu/drm/i915/gt/intel_lrc.c
+++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
@@ -1137,13 +1137,6 @@ __unwind_incomplete_requests(struct intel_engine_cs *engine)
list_move(&rq->sched.link, pl);
set_bit(I915_FENCE_FLAG_PQUEUE, &rq->fence.flags);
- /* Check in case we rollback so far we wrap [size/2] */
- if (intel_ring_direction(rq->ring,
- intel_ring_wrap(rq->ring,
- rq->tail),
- rq->ring->tail) > 0)
- rq->context->lrc.desc |= CTX_DESC_FORCE_RESTORE;
-
active = rq;
} else {
struct intel_engine_cs *owner = rq->context->engine;
@@ -1512,9 +1505,8 @@ static u64 execlists_update_context(struct i915_request *rq)
* HW has a tendency to ignore us rewinding the TAIL to the end of
* an earlier request.
*/
- GEM_BUG_ON(ce->lrc_reg_state[CTX_RING_TAIL] != rq->ring->tail);
- prev = rq->ring->tail;
tail = intel_ring_set_tail(rq->ring, rq->tail);
+ prev = ce->lrc_reg_state[CTX_RING_TAIL];
if (unlikely(intel_ring_direction(rq->ring, tail, prev) <= 0))
desc |= CTX_DESC_FORCE_RESTORE;
ce->lrc_reg_state[CTX_RING_TAIL] = tail;
@@ -4773,14 +4765,6 @@ static int gen12_emit_flush(struct i915_request *request, u32 mode)
return 0;
}
-static void assert_request_valid(struct i915_request *rq)
-{
- struct intel_ring *ring __maybe_unused = rq->ring;
-
- /* Can we unwind this request without appearing to go forwards? */
- GEM_BUG_ON(intel_ring_direction(ring, rq->wa_tail, rq->head) <= 0);
-}
-
/*
* Reserve space for 2 NOOPs at the end of each request to be
* used as a workaround for not being allowed to do lite
@@ -4793,9 +4777,6 @@ static u32 *gen8_emit_wa_tail(struct i915_request *request, u32 *cs)
*cs++ = MI_NOOP;
request->wa_tail = intel_ring_offset(request, cs);
- /* Check that entire request is less than half the ring */
- assert_request_valid(request);
-
return cs;
}
diff --git a/drivers/gpu/drm/i915/gt/intel_ring.c b/drivers/gpu/drm/i915/gt/intel_ring.c
index bdb324167ef3..8cda1b7e17ba 100644
--- a/drivers/gpu/drm/i915/gt/intel_ring.c
+++ b/drivers/gpu/drm/i915/gt/intel_ring.c
@@ -315,7 +315,3 @@ int intel_ring_cacheline_align(struct i915_request *rq)
GEM_BUG_ON(rq->ring->emit & (CACHELINE_BYTES - 1));
return 0;
}
-
-#if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
-#include "selftest_ring.c"
-#endif
diff --git a/drivers/gpu/drm/i915/gt/selftest_mocs.c b/drivers/gpu/drm/i915/gt/selftest_mocs.c
index b25eba50c88e..7bae64018ad9 100644
--- a/drivers/gpu/drm/i915/gt/selftest_mocs.c
+++ b/drivers/gpu/drm/i915/gt/selftest_mocs.c
@@ -18,20 +18,6 @@ struct live_mocs {
void *vaddr;
};
-static struct intel_context *mocs_context_create(struct intel_engine_cs *engine)
-{
- struct intel_context *ce;
-
- ce = intel_context_create(engine);
- if (IS_ERR(ce))
- return ce;
-
- /* We build large requests to read the registers from the ring */
- ce->ring = __intel_context_ring_size(SZ_16K);
-
- return ce;
-}
-
static int request_add_sync(struct i915_request *rq, int err)
{
i915_request_get(rq);
@@ -315,7 +301,7 @@ static int live_mocs_clean(void *arg)
for_each_engine(engine, gt, id) {
struct intel_context *ce;
- ce = mocs_context_create(engine);
+ ce = intel_context_create(engine);
if (IS_ERR(ce)) {
err = PTR_ERR(ce);
break;
@@ -409,7 +395,7 @@ static int live_mocs_reset(void *arg)
for_each_engine(engine, gt, id) {
struct intel_context *ce;
- ce = mocs_context_create(engine);
+ ce = intel_context_create(engine);
if (IS_ERR(ce)) {
err = PTR_ERR(ce);
break;
diff --git a/drivers/gpu/drm/i915/gt/selftest_ring.c b/drivers/gpu/drm/i915/gt/selftest_ring.c
deleted file mode 100644
index 2a8c534dc125..000000000000
--- a/drivers/gpu/drm/i915/gt/selftest_ring.c
+++ /dev/null
@@ -1,110 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Copyright © 2020 Intel Corporation
- */
-
-static struct intel_ring *mock_ring(unsigned long sz)
-{
- struct intel_ring *ring;
-
- ring = kzalloc(sizeof(*ring) + sz, GFP_KERNEL);
- if (!ring)
- return NULL;
-
- kref_init(&ring->ref);
- ring->size = sz;
- ring->wrap = BITS_PER_TYPE(ring->size) - ilog2(sz);
- ring->effective_size = sz;
- ring->vaddr = (void *)(ring + 1);
- atomic_set(&ring->pin_count, 1);
-
- intel_ring_update_space(ring);
-
- return ring;
-}
-
-static void mock_ring_free(struct intel_ring *ring)
-{
- kfree(ring);
-}
-
-static int check_ring_direction(struct intel_ring *ring,
- u32 next, u32 prev,
- int expected)
-{
- int result;
-
- result = intel_ring_direction(ring, next, prev);
- if (result < 0)
- result = -1;
- else if (result > 0)
- result = 1;
-
- if (result != expected) {
- pr_err("intel_ring_direction(%u, %u):%d != %d\n",
- next, prev, result, expected);
- return -EINVAL;
- }
-
- return 0;
-}
-
-static int check_ring_step(struct intel_ring *ring, u32 x, u32 step)
-{
- u32 prev = x, next = intel_ring_wrap(ring, x + step);
- int err = 0;
-
- err |= check_ring_direction(ring, next, next, 0);
- err |= check_ring_direction(ring, prev, prev, 0);
- err |= check_ring_direction(ring, next, prev, 1);
- err |= check_ring_direction(ring, prev, next, -1);
-
- return err;
-}
-
-static int check_ring_offset(struct intel_ring *ring, u32 x, u32 step)
-{
- int err = 0;
-
- err |= check_ring_step(ring, x, step);
- err |= check_ring_step(ring, intel_ring_wrap(ring, x + 1), step);
- err |= check_ring_step(ring, intel_ring_wrap(ring, x - 1), step);
-
- return err;
-}
-
-static int igt_ring_direction(void *dummy)
-{
- struct intel_ring *ring;
- unsigned int half = 2048;
- int step, err = 0;
-
- ring = mock_ring(2 * half);
- if (!ring)
- return -ENOMEM;
-
- GEM_BUG_ON(ring->size != 2 * half);
-
- /* Precision of wrap detection is limited to ring->size / 2 */
- for (step = 1; step < half; step <<= 1) {
- err |= check_ring_offset(ring, 0, step);
- err |= check_ring_offset(ring, half, step);
- }
- err |= check_ring_step(ring, 0, half - 64);
-
- /* And check unwrapped handling for good measure */
- err |= check_ring_offset(ring, 0, 2 * half + 64);
- err |= check_ring_offset(ring, 3 * half, 1);
-
- mock_ring_free(ring);
- return err;
-}
-
-int intel_ring_mock_selftests(void)
-{
- static const struct i915_subtest tests[] = {
- SUBTEST(igt_ring_direction),
- };
-
- return i915_subtests(tests, NULL);
-}
diff --git a/drivers/gpu/drm/i915/selftests/i915_mock_selftests.h b/drivers/gpu/drm/i915/selftests/i915_mock_selftests.h
index 3db34d3eea58..1929feba4e8e 100644
--- a/drivers/gpu/drm/i915/selftests/i915_mock_selftests.h
+++ b/drivers/gpu/drm/i915/selftests/i915_mock_selftests.h
@@ -21,7 +21,6 @@ selftest(fence, i915_sw_fence_mock_selftests)
selftest(scatterlist, scatterlist_mock_selftests)
selftest(syncmap, i915_syncmap_mock_selftests)
selftest(uncore, intel_uncore_mock_selftests)
-selftest(ring, intel_ring_mock_selftests)
selftest(engine, intel_engine_cs_mock_selftests)
selftest(timelines, intel_timeline_mock_selftests)
selftest(requests, i915_request_mock_selftests)
--
2.20.1
More information about the Intel-gfx-trybot
mailing list