@@ -72,7 +72,7 @@ emit_recursive_batch(igt_spin_t *spin,
int fd, const struct igt_spin_factory *opts)
{
#define SCRATCH 0
-#define BATCH 1
+#define BATCH IGT_SPIN_BATCH
const int gen = intel_gen(intel_get_drm_devid(fd));
struct drm_i915_gem_relocation_entry relocs[2], *r;
struct drm_i915_gem_execbuffer2 *execbuf;
@@ -261,12 +261,11 @@ emit_recursive_batch(igt_spin_t *spin,
igt_assert_lt(cs - batch, BATCH_SIZE / sizeof(*cs));
/* Make it easier for callers to resubmit. */
-
- obj[BATCH].relocation_count = 0;
- obj[BATCH].relocs_ptr = 0;
-
- obj[SCRATCH].flags = EXEC_OBJECT_PINNED;
- obj[BATCH].flags = EXEC_OBJECT_PINNED;
+ for (i = 0; i < ARRAY_SIZE(spin->obj); i++) {
+ spin->obj[i].relocation_count = 0;
+ spin->obj[i].relocs_ptr = 0;
+ spin->obj[i].flags = EXEC_OBJECT_PINNED;
+ }
spin->cmd_precondition = *spin->condition;
@@ -42,6 +42,7 @@ typedef struct igt_spin {
int out_fence;
struct drm_i915_gem_exec_object2 obj[2];
+#define IGT_SPIN_BATCH 1
struct drm_i915_gem_execbuffer2 execbuf;
uint32_t poll_handle;
uint32_t *poll;
@@ -234,7 +234,8 @@ static void independent(int fd, unsigned int engine)
} else {
struct drm_i915_gem_execbuffer2 eb = {
.buffer_count = 1,
- .buffers_ptr = to_user_pointer(&spin->obj[1]),
+ .buffers_ptr =
+ to_user_pointer(&spin->obj[IGT_SPIN_BATCH]),
.flags = other,
};
gem_execbuf(fd, &eb);
@@ -537,7 +538,8 @@ static void semaphore_resolve(int i915)
/* Then cancel the spinner */
*cs++ = MI_STORE_DWORD_IMM;
- *cs++ = spin->obj[1].offset + offset_in_page(spin->condition);
+ *cs++ = spin->obj[IGT_SPIN_BATCH].offset +
+ offset_in_page(spin->condition);
*cs++ = 0;
*cs++ = MI_BATCH_BUFFER_END;
@@ -548,7 +550,7 @@ static void semaphore_resolve(int i915)
/* First up is our spinning semaphore */
memset(obj, 0, sizeof(obj));
- obj[0] = spin->obj[1];
+ obj[0] = spin->obj[IGT_SPIN_BATCH];
obj[1].handle = semaphore;
obj[1].offset = SEMAPHORE_ADDR;
obj[1].flags = EXEC_OBJECT_PINNED;
@@ -562,7 +564,7 @@ static void semaphore_resolve(int i915)
memset(obj, 0, sizeof(obj));
obj[0].handle = handle;
obj[0].flags = EXEC_OBJECT_WRITE; /* always after semaphore */
- obj[1] = spin->obj[1];
+ obj[1] = spin->obj[IGT_SPIN_BATCH];
eb.buffer_count = 2;
eb.rsvd1 = 0;
gem_execbuf(i915, &eb);
@@ -638,11 +640,13 @@ static void semaphore_noskip(int i915)
/* Cancel the following spinner */
*cs++ = MI_STORE_DWORD_IMM;
if (gen >= 8) {
- *cs++ = spin->obj[1].offset + offset_in_page(spin->condition);
+ *cs++ = spin->obj[IGT_SPIN_BATCH].offset +
+ offset_in_page(spin->condition);
*cs++ = 0;
} else {
*cs++ = 0;
- *cs++ = spin->obj[1].offset + offset_in_page(spin->condition);
+ *cs++ = spin->obj[IGT_SPIN_BATCH].offset +
+ offset_in_page(spin->condition);
}
*cs++ = MI_BATCH_BUFFER_END;
@@ -651,9 +655,9 @@ static void semaphore_noskip(int i915)
/* port0: implicit semaphore from engine */
memset(obj, 0, sizeof(obj));
- obj[0] = chain->obj[1];
+ obj[0] = chain->obj[IGT_SPIN_BATCH];
obj[0].flags |= EXEC_OBJECT_WRITE;
- obj[1] = spin->obj[1];
+ obj[1] = spin->obj[IGT_SPIN_BATCH];
obj[2].handle = handle;
memset(&eb, 0, sizeof(eb));
eb.buffer_count = 3;
@@ -666,7 +670,7 @@ static void semaphore_noskip(int i915)
memset(obj, 0, sizeof(obj));
obj[0].handle = handle;
obj[0].flags = EXEC_OBJECT_WRITE;
- obj[1] = spin->obj[1];
+ obj[1] = spin->obj[IGT_SPIN_BATCH];
memset(&eb, 0, sizeof(eb));
eb.buffer_count = 2;
eb.buffers_ptr = to_user_pointer(obj);
@@ -842,7 +846,8 @@ static igt_spin_t *__noise(int fd, uint32_t ctx, int prio, igt_spin_t *spin)
} else {
struct drm_i915_gem_execbuffer2 eb = {
.buffer_count = 1,
- .buffers_ptr = to_user_pointer(&spin->obj[1]),
+ .buffers_ptr =
+ to_user_pointer(&spin->obj[IGT_SPIN_BATCH]),
.rsvd1 = ctx,
.flags = other,
};
@@ -360,7 +360,7 @@ static void test_evict_hang(int fd)
execbuf.buffer_count = 1;
hang = igt_hang_ctx(fd, 0, 0, 0);
- expected = hang.spin->obj[1].offset;
+ expected = hang.spin->obj[IGT_SPIN_BATCH].offset;
/* Replace the hung batch with ourselves, forcing an eviction */
object.offset = expected;
@@ -79,7 +79,7 @@ static void spin_resubmit(int fd, unsigned int engine, unsigned int flags)
struct drm_i915_gem_execbuffer2 eb = {
.buffer_count = 1,
- .buffers_ptr = to_user_pointer(&spin->obj[1]),
+ .buffers_ptr = to_user_pointer(&spin->obj[IGT_SPIN_BATCH]),
.rsvd1 = ctx1,
};
@@ -98,7 +98,7 @@ static void spin_resubmit(int fd, unsigned int engine, unsigned int flags)
igt_spin_end(spin);
- gem_sync(fd, spin->obj[1].handle);
+ gem_sync(fd, spin->handle);
igt_spin_free(fd, spin);
@@ -209,7 +209,7 @@ static void test_error_state_capture(unsigned ring_id,
clear_error_state();
hang = igt_hang_ctx(device, 0, ring_id, HANG_ALLOW_CAPTURE);
- offset = hang.spin->obj[1].offset;
+ offset = hang.spin->obj[IGT_SPIN_BATCH].offset;
batch = gem_mmap__cpu(device, hang.spin->handle, 0, 4096, PROT_READ);
gem_set_domain(device, hang.spin->handle, I915_GEM_DOMAIN_CPU, 0);
Instead of relying a static obj array inside igt_spin_t, access it with proper indexing. v2: IGT_SPIN_BATCH Cc: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Mika Kuoppala <mika.kuoppala@linux.intel.com> --- lib/igt_dummyload.c | 13 ++++++------- lib/igt_dummyload.h | 1 + tests/i915/gem_exec_schedule.c | 25 +++++++++++++++---------- tests/i915/gem_softpin.c | 2 +- tests/i915/gem_spin_batch.c | 4 ++-- tests/i915/i915_hangman.c | 2 +- 6 files changed, 26 insertions(+), 21 deletions(-)