#include <stdlib.h>
#include <stdio.h>
#include <string.h>
-#include <assert.h>
#include <fcntl.h>
#include <inttypes.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/time.h>
#include "drm.h"
-#include "i915_drm.h"
+#include "ioctl_wrappers.h"
#include "drmtest.h"
-#define MI_BATCH_BUFFER_END (0xA<<23)
#define BATCH_SIZE (1024*1024)
#define LOCAL_I915_EXEC_HANDLE_LUT (1<<12)
i915_execbuffer2_set_context_id(execbuf, 0);
execbuf.rsvd2 = 0;
- return drmIoctl(fd,
- DRM_IOCTL_I915_GEM_EXECBUFFER2,
- &execbuf);
+ if (drmIoctl(fd,
+ DRM_IOCTL_I915_GEM_EXECBUFFER2,
+ &execbuf))
+ return -errno;
+
+ return 0;
}
static int many_exec(int fd, uint32_t batch, int num_exec, int num_reloc, unsigned flags)
gem_exec = calloc(num_exec+1, sizeof(*gem_exec));
gem_reloc = calloc(num_reloc, sizeof(*gem_reloc));
- assert(gem_exec && gem_reloc);
+ igt_assert(gem_exec && gem_reloc);
for (n = 0; n < num_exec; n++) {
gem_exec[n].handle = gem_create(fd, 4096);
uint32_t target;
if (flags & BROKEN) {
- target = -(rand() % 4096);
+ target = -(rand() % 4096) - 1;
} else {
target = rand() % (num_exec + 1);
if ((flags & USE_LUT) == 0)
ret = drmIoctl(fd,
DRM_IOCTL_I915_GEM_EXECBUFFER2,
&execbuf);
+ if (ret < 0)
+ ret = -errno;
for (n = 0; n < num_exec; n++)
gem_close(fd, gem_exec[n].handle);
return ret;
}
-#define _fail(x) ((x) == -1 && errno == ENOENT)
-#define ASSERT(x) do { \
- if (!(x)) { \
- fprintf(stderr, "%s:%d failed, errno=%d\n", \
- __FUNCTION__, __LINE__, errno); \
- abort(); \
- } \
-} while (0)
-#define fail(x) ASSERT(_fail(x))
-#define pass(x) ASSERT(!_fail(x))
-
-int main(int argc, char **argv)
+#define fail(x) igt_assert((x) == -ENOENT)
+#define pass(x) igt_assert((x) == 0)
+
+igt_simple_main
{
uint32_t batch[2] = {MI_BATCH_BUFFER_END};
uint32_t handle;
do_or_die(exec(fd, handle, NORMAL));
fail(exec(fd, handle, BROKEN));
- if (exec(fd, handle, USE_LUT))
- return 77;
+ igt_skip_on(exec(fd, handle, USE_LUT));
do_or_die(exec(fd, handle, USE_LUT));
fail(exec(fd, handle, USE_LUT | BROKEN));
- for (i = 2; i <= 65536; i *= 2) {
+ for (i = 2; i <= SLOW_QUICK(65536, 8); i *= 2) {
+ if (many_exec(fd, handle, i+1, i+1, NORMAL) == -ENOSPC)
+ break;
+
pass(many_exec(fd, handle, i-1, i-1, NORMAL));
pass(many_exec(fd, handle, i-1, i, NORMAL));
pass(many_exec(fd, handle, i-1, i+1, NORMAL));
fail(many_exec(fd, handle, i+1, i, USE_LUT | BROKEN));
fail(many_exec(fd, handle, i+1, i+1, USE_LUT | BROKEN));
}
-
- return 0;
}