mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-07 16:06:25 +00:00
lib: Share common __gem_execbuf()
An oft-repeated function to check EXECBUFFER2 for a particular fail condition. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
711398e82a
commit
e3b68bb666
@ -178,14 +178,6 @@ static int gem_linear_blt(int fd,
|
|||||||
return (b+2 - batch) * sizeof(uint32_t);
|
return (b+2 - batch) * sizeof(uint32_t);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
|
|
||||||
{
|
|
||||||
int err = 0;
|
|
||||||
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, execbuf))
|
|
||||||
err = -errno;
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int run(int object, int batch, int time, int reps)
|
static int run(int object, int batch, int time, int reps)
|
||||||
{
|
{
|
||||||
struct drm_i915_gem_execbuffer2 execbuf;
|
struct drm_i915_gem_execbuffer2 execbuf;
|
||||||
|
@ -49,15 +49,6 @@
|
|||||||
#define LOCAL_I915_EXEC_NO_RELOC (1<<11)
|
#define LOCAL_I915_EXEC_NO_RELOC (1<<11)
|
||||||
#define LOCAL_I915_EXEC_HANDLE_LUT (1<<12)
|
#define LOCAL_I915_EXEC_HANDLE_LUT (1<<12)
|
||||||
|
|
||||||
static int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
|
|
||||||
{
|
|
||||||
int err = 0;
|
|
||||||
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, execbuf))
|
|
||||||
err = -errno;
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static double elapsed(const struct timespec *start,
|
static double elapsed(const struct timespec *start,
|
||||||
const struct timespec *end)
|
const struct timespec *end)
|
||||||
{
|
{
|
||||||
|
@ -56,14 +56,6 @@ static double elapsed(const struct timespec *start,
|
|||||||
return (end->tv_sec - start->tv_sec) + 1e-9*(end->tv_nsec - start->tv_nsec);
|
return (end->tv_sec - start->tv_sec) + 1e-9*(end->tv_nsec - start->tv_nsec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
|
|
||||||
{
|
|
||||||
int err = 0;
|
|
||||||
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, execbuf))
|
|
||||||
err = -errno;
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint32_t batch(int fd)
|
static uint32_t batch(int fd)
|
||||||
{
|
{
|
||||||
const uint32_t buf[] = {MI_BATCH_BUFFER_END};
|
const uint32_t buf[] = {MI_BATCH_BUFFER_END};
|
||||||
|
@ -55,14 +55,6 @@ static double elapsed(const struct timespec *start,
|
|||||||
return (end->tv_sec - start->tv_sec) + 1e-9*(end->tv_nsec - start->tv_nsec);
|
return (end->tv_sec - start->tv_sec) + 1e-9*(end->tv_nsec - start->tv_nsec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
|
|
||||||
{
|
|
||||||
int err = 0;
|
|
||||||
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, execbuf))
|
|
||||||
err = -errno;
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint32_t batch(int fd)
|
static uint32_t batch(int fd)
|
||||||
{
|
{
|
||||||
const uint32_t buf[] = {MI_BATCH_BUFFER_END};
|
const uint32_t buf[] = {MI_BATCH_BUFFER_END};
|
||||||
|
@ -502,6 +502,22 @@ uint32_t gem_create(int fd, uint64_t size)
|
|||||||
return create.handle;
|
return create.handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* __gem_execbuf:
|
||||||
|
* @fd: open i915 drm file descriptor
|
||||||
|
* @execbuf: execbuffer data structure
|
||||||
|
*
|
||||||
|
* This wraps the EXECBUFFER2 ioctl, which submits a batchbuffer for the gpu to
|
||||||
|
* run. This is allowed to fail, with -errno returned.
|
||||||
|
*/
|
||||||
|
int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, execbuf))
|
||||||
|
err = -errno;
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gem_execbuf:
|
* gem_execbuf:
|
||||||
* @fd: open i915 drm file descriptor
|
* @fd: open i915 drm file descriptor
|
||||||
@ -512,10 +528,7 @@ uint32_t gem_create(int fd, uint64_t size)
|
|||||||
*/
|
*/
|
||||||
void gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
|
void gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
|
||||||
{
|
{
|
||||||
int result;
|
igt_assert_eq(__gem_execbuf(fd, execbuf), 0);
|
||||||
|
|
||||||
result = drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, execbuf);
|
|
||||||
igt_assert(result == 0);
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,6 +62,7 @@ uint32_t gem_create_stolen(int fd, uint64_t size);
|
|||||||
uint32_t __gem_create(int fd, int size);
|
uint32_t __gem_create(int fd, int size);
|
||||||
uint32_t gem_create(int fd, uint64_t size);
|
uint32_t gem_create(int fd, uint64_t size);
|
||||||
void gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf);
|
void gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf);
|
||||||
|
int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf);
|
||||||
|
|
||||||
void *gem_mmap__gtt(int fd, uint32_t handle, uint64_t size, unsigned prot);
|
void *gem_mmap__gtt(int fd, uint32_t handle, uint64_t size, unsigned prot);
|
||||||
void *gem_mmap__cpu(int fd, uint32_t handle, uint64_t offset, uint64_t size, unsigned prot);
|
void *gem_mmap__cpu(int fd, uint32_t handle, uint64_t offset, uint64_t size, unsigned prot);
|
||||||
|
@ -122,14 +122,6 @@ static uint32_t busy_blt(int fd)
|
|||||||
return object[0].handle;
|
return object[0].handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *eb)
|
|
||||||
{
|
|
||||||
int err = 0;
|
|
||||||
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, eb))
|
|
||||||
err = -errno;
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool exec_noop(int fd,
|
static bool exec_noop(int fd,
|
||||||
uint32_t *handles,
|
uint32_t *handles,
|
||||||
unsigned ring,
|
unsigned ring,
|
||||||
|
@ -112,14 +112,6 @@ static void test_throttle(int fd)
|
|||||||
trigger_reset(fd);
|
trigger_reset(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *eb)
|
|
||||||
{
|
|
||||||
int err = 0;
|
|
||||||
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, eb))
|
|
||||||
err = -errno;
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void test_execbuf(int fd)
|
static void test_execbuf(int fd)
|
||||||
{
|
{
|
||||||
struct drm_i915_gem_execbuffer2 execbuf;
|
struct drm_i915_gem_execbuffer2 execbuf;
|
||||||
|
@ -40,11 +40,6 @@
|
|||||||
|
|
||||||
IGT_TEST_DESCRIPTION("Exercises the basic execbuffer using object alignments");
|
IGT_TEST_DESCRIPTION("Exercises the basic execbuffer using object alignments");
|
||||||
|
|
||||||
static int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *eb)
|
|
||||||
{
|
|
||||||
return drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, eb);
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint32_t find_last_bit(uint64_t x)
|
static uint32_t find_last_bit(uint64_t x)
|
||||||
{
|
{
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
@ -163,8 +158,8 @@ static void single(int fd)
|
|||||||
if (__gem_execbuf(fd, &execbuf)) {
|
if (__gem_execbuf(fd, &execbuf)) {
|
||||||
execobj.flags = 0;
|
execobj.flags = 0;
|
||||||
gtt_size = 1ull << 32;
|
gtt_size = 1ull << 32;
|
||||||
}
|
|
||||||
gem_execbuf(fd, &execbuf);
|
gem_execbuf(fd, &execbuf);
|
||||||
|
}
|
||||||
|
|
||||||
execobj.alignment = 3*4096;
|
execobj.alignment = 3*4096;
|
||||||
non_pot = __gem_execbuf(fd, &execbuf) == 0;
|
non_pot = __gem_execbuf(fd, &execbuf) == 0;
|
||||||
|
@ -35,14 +35,6 @@
|
|||||||
#define I915_PARAM_CMD_PARSER_VERSION 28
|
#define I915_PARAM_CMD_PARSER_VERSION 28
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
|
|
||||||
{
|
|
||||||
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, execbuf))
|
|
||||||
return -errno;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void exec_batch_patched(int fd, uint32_t cmd_bo, uint32_t *cmds,
|
static void exec_batch_patched(int fd, uint32_t cmd_bo, uint32_t *cmds,
|
||||||
int size, int patch_offset, uint64_t expected_value)
|
int size, int patch_offset, uint64_t expected_value)
|
||||||
{
|
{
|
||||||
|
@ -141,14 +141,6 @@ static void fill_reloc(struct drm_i915_gem_relocation_entry *reloc, uint32_t han
|
|||||||
reloc->write_domain = 0;
|
reloc->write_domain = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *eb)
|
|
||||||
{
|
|
||||||
int err = 0;
|
|
||||||
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, eb))
|
|
||||||
err = errno;
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define BUSY_LOAD (1 << 0)
|
#define BUSY_LOAD (1 << 0)
|
||||||
#define INTERRUPTIBLE (1 << 1)
|
#define INTERRUPTIBLE (1 << 1)
|
||||||
|
|
||||||
@ -200,8 +192,8 @@ static void run_test(int fd, int num_fences, int expected_errno,
|
|||||||
if (flags & BUSY_LOAD)
|
if (flags & BUSY_LOAD)
|
||||||
emit_dummy_load();
|
emit_dummy_load();
|
||||||
|
|
||||||
igt_assert_eq(__gem_execbuf(fd, &execbuf[0]), expected_errno);
|
igt_assert_eq(__gem_execbuf(fd, &execbuf[0]), -expected_errno);
|
||||||
igt_assert_eq(__gem_execbuf(fd, &execbuf[1]), expected_errno);
|
igt_assert_eq(__gem_execbuf(fd, &execbuf[1]), -expected_errno);
|
||||||
} while (--loop);
|
} while (--loop);
|
||||||
|
|
||||||
if (flags & INTERRUPTIBLE)
|
if (flags & INTERRUPTIBLE)
|
||||||
|
@ -136,20 +136,6 @@ static int gem_reset_status(int fd, int ctx_id)
|
|||||||
return RS_NO_ERROR;
|
return RS_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gem_exec(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = ioctl(fd,
|
|
||||||
DRM_IOCTL_I915_GEM_EXECBUFFER2,
|
|
||||||
execbuf);
|
|
||||||
|
|
||||||
if (ret < 0)
|
|
||||||
return -errno;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int exec_valid_ring(int fd, int ctx, int ring)
|
static int exec_valid_ring(int fd, int ctx, int ring)
|
||||||
{
|
{
|
||||||
struct drm_i915_gem_execbuffer2 execbuf;
|
struct drm_i915_gem_execbuffer2 execbuf;
|
||||||
@ -180,7 +166,7 @@ static int exec_valid_ring(int fd, int ctx, int ring)
|
|||||||
i915_execbuffer2_set_context_id(execbuf, ctx);
|
i915_execbuffer2_set_context_id(execbuf, ctx);
|
||||||
execbuf.rsvd2 = 0;
|
execbuf.rsvd2 = 0;
|
||||||
|
|
||||||
ret = gem_exec(fd, &execbuf);
|
ret = __gem_execbuf(fd, &execbuf);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -35,14 +35,6 @@ IGT_TEST_DESCRIPTION("Basic check of ring<->ring write synchronisation.");
|
|||||||
* Extremely efficient at catching missed irqs with semaphores=0 ...
|
* Extremely efficient at catching missed irqs with semaphores=0 ...
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *eb)
|
|
||||||
{
|
|
||||||
int err = 0;
|
|
||||||
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, eb))
|
|
||||||
err = -errno;
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sync_loop(int fd)
|
sync_loop(int fd)
|
||||||
{
|
{
|
||||||
|
@ -71,14 +71,6 @@ static void fill_ring(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
|
|||||||
gem_execbuf(fd, execbuf);
|
gem_execbuf(fd, execbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
|
|
||||||
{
|
|
||||||
int err = 0;
|
|
||||||
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, execbuf))
|
|
||||||
err = -errno;
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define INTERRUPTIBLE 0x1
|
#define INTERRUPTIBLE 0x1
|
||||||
#define HANG 0x2
|
#define HANG 0x2
|
||||||
#define CHILD 0x8
|
#define CHILD 0x8
|
||||||
|
@ -43,14 +43,6 @@ static uint64_t gen8_canonical_addr(uint64_t address)
|
|||||||
return (__s64)(address << shift) >> shift;
|
return (__s64)(address << shift) >> shift;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *eb)
|
|
||||||
{
|
|
||||||
int err = 0;
|
|
||||||
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, eb))
|
|
||||||
err = -errno;
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void test_invalid(int fd)
|
static void test_invalid(int fd)
|
||||||
{
|
{
|
||||||
const uint32_t bbe = MI_BATCH_BUFFER_END;
|
const uint32_t bbe = MI_BATCH_BUFFER_END;
|
||||||
|
@ -51,11 +51,6 @@
|
|||||||
|
|
||||||
IGT_TEST_DESCRIPTION("Test of streaming writes into active GPU sources");
|
IGT_TEST_DESCRIPTION("Test of streaming writes into active GPU sources");
|
||||||
|
|
||||||
static bool __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *eb)
|
|
||||||
{
|
|
||||||
return drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, eb) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define SRC 0
|
#define SRC 0
|
||||||
#define DST 1
|
#define DST 1
|
||||||
#define BATCH 2
|
#define BATCH 2
|
||||||
@ -109,9 +104,9 @@ static void test_streaming(int fd, int mode, int sync)
|
|||||||
execbuf.buffers_ptr = (uintptr_t)exec;
|
execbuf.buffers_ptr = (uintptr_t)exec;
|
||||||
execbuf.buffer_count = 2;
|
execbuf.buffer_count = 2;
|
||||||
execbuf.flags = LOCAL_I915_EXEC_HANDLE_LUT;
|
execbuf.flags = LOCAL_I915_EXEC_HANDLE_LUT;
|
||||||
if (!__gem_execbuf(fd, &execbuf)) {
|
if (__gem_execbuf(fd, &execbuf)) {
|
||||||
execbuf.flags = 0;
|
execbuf.flags = 0;
|
||||||
igt_require(__gem_execbuf(fd, &execbuf));
|
igt_require(__gem_execbuf(fd, &execbuf) == 0);
|
||||||
}
|
}
|
||||||
/* We assume that the active objects are fixed to avoid relocations */
|
/* We assume that the active objects are fixed to avoid relocations */
|
||||||
__src_offset = src_offset;
|
__src_offset = src_offset;
|
||||||
@ -135,7 +130,7 @@ static void test_streaming(int fd, int mode, int sync)
|
|||||||
reloc[2*i+1].read_domains = I915_GEM_DOMAIN_RENDER;
|
reloc[2*i+1].read_domains = I915_GEM_DOMAIN_RENDER;
|
||||||
reloc[2*i+1].write_domain = 0;
|
reloc[2*i+1].write_domain = 0;
|
||||||
}
|
}
|
||||||
igt_assert(__gem_execbuf(fd, &execbuf));
|
gem_execbuf(fd, &execbuf);
|
||||||
igt_assert_eq_u64(__src_offset, src_offset);
|
igt_assert_eq_u64(__src_offset, src_offset);
|
||||||
igt_assert_eq_u64(__dst_offset, dst_offset);
|
igt_assert_eq_u64(__dst_offset, dst_offset);
|
||||||
|
|
||||||
@ -304,7 +299,7 @@ static void test_batch(int fd, int mode, int reverse)
|
|||||||
execbuf.flags = LOCAL_I915_EXEC_HANDLE_LUT;
|
execbuf.flags = LOCAL_I915_EXEC_HANDLE_LUT;
|
||||||
if (gem_has_blt(fd))
|
if (gem_has_blt(fd))
|
||||||
execbuf.flags |= I915_EXEC_BLT;
|
execbuf.flags |= I915_EXEC_BLT;
|
||||||
if (!__gem_execbuf(fd, &execbuf)) {
|
if (__gem_execbuf(fd, &execbuf)) {
|
||||||
execbuf.flags &= ~LOCAL_I915_EXEC_HANDLE_LUT;
|
execbuf.flags &= ~LOCAL_I915_EXEC_HANDLE_LUT;
|
||||||
gem_execbuf(fd, &execbuf);
|
gem_execbuf(fd, &execbuf);
|
||||||
}
|
}
|
||||||
|
@ -65,14 +65,6 @@ out:
|
|||||||
return ts.tv_sec + 1e-9*ts.tv_nsec;
|
return ts.tv_sec + 1e-9*ts.tv_nsec;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *eb)
|
|
||||||
{
|
|
||||||
int err = 0;
|
|
||||||
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, eb))
|
|
||||||
err = -errno;
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sync_ring(int fd, int ring, unsigned flags)
|
sync_ring(int fd, int ring, unsigned flags)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user