public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
* [PATCH i-g-t 1/2] lib: Move __gem_context_create to common ioctl wrapper library.
@ 2017-10-12 22:10 Antonio Argenziano
  2017-10-12 22:10 ` [i-g-t 2/2] tests/gem_reset_stats: Add client ban test Antonio Argenziano
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Antonio Argenziano @ 2017-10-12 22:10 UTC (permalink / raw)
  To: intel-gfx

This patch adds a context creation ioctl wrapper that returns the error
for the caller to consume. Multiple tests that implemented this already,
have been changed to use the new library function.

v2:
	- Add gem_require_contexts() to check for contexts support (Chris)

Signed-off-by: Antonio Argenziano <antonio.argenziano@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
---
 benchmarks/gem_exec_ctx.c   |  6 +++---
 benchmarks/gem_exec_trace.c |  4 ++--
 lib/ioctl_wrappers.c        | 44 ++++++++++++++++++++++++++++++++++----------
 lib/ioctl_wrappers.h        |  2 ++
 tests/gem_ctx_switch.c      | 13 -------------
 tests/gem_eio.c             | 13 +------------
 tests/gem_exec_await.c      | 14 ++------------
 tests/gem_exec_nop.c        | 13 -------------
 tests/gem_exec_parallel.c   | 15 +++------------
 tests/gem_exec_reuse.c      | 13 -------------
 tests/gem_exec_whisper.c    | 13 -------------
 11 files changed, 47 insertions(+), 103 deletions(-)

diff --git a/benchmarks/gem_exec_ctx.c b/benchmarks/gem_exec_ctx.c
index 0eac04b0..a1c6e5d7 100644
--- a/benchmarks/gem_exec_ctx.c
+++ b/benchmarks/gem_exec_ctx.c
@@ -64,7 +64,7 @@ static uint32_t batch(int fd)
 	return handle;
 }
 
-static uint32_t __gem_context_create(int fd)
+static uint32_t __gem_context_create_local(int fd)
 {
 	struct drm_i915_gem_context_create create;
 
@@ -101,7 +101,7 @@ static int loop(unsigned ring,
 	execbuf.flags |= LOCAL_I915_EXEC_HANDLE_LUT;
 	execbuf.flags |= LOCAL_I915_EXEC_NO_RELOC;
 	if (mode != DEFAULT) {
-		execbuf.rsvd1 = __gem_context_create(fd);
+		execbuf.rsvd1 = __gem_context_create_local(fd);
 		if (execbuf.rsvd1 == 0)
 			return 77;
 	}
@@ -125,7 +125,7 @@ static int loop(unsigned ring,
 			uint32_t ctx = 0;
 
 			if (mode != DEFAULT && mode != NOP) {
-				execbuf.rsvd1 = __gem_context_create(fd);
+				execbuf.rsvd1 = __gem_context_create_local(fd);
 				ctx = gem_context_create(fd);
 			}
 
diff --git a/benchmarks/gem_exec_trace.c b/benchmarks/gem_exec_trace.c
index 12577649..2724ee92 100644
--- a/benchmarks/gem_exec_trace.c
+++ b/benchmarks/gem_exec_trace.c
@@ -105,7 +105,7 @@ static double elapsed(const struct timespec *start, const struct timespec *end)
 	return 1e3*(end->tv_sec - start->tv_sec) + 1e-6*(end->tv_nsec - start->tv_nsec);
 }
 
-static uint32_t __gem_context_create(int fd)
+static uint32_t __gem_context_create_local(int fd)
 {
 	struct drm_i915_gem_context_create arg = {};
 	drmIoctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE, &arg);
@@ -216,7 +216,7 @@ static double replay(const char *filename, long nop, long range)
 				num_ctx = new_ctx;
 			}
 
-			ctx[t->handle] = __gem_context_create(fd);
+			ctx[t->handle] = __gem_context_create_local(fd);
 			break;
 		}
 	case DEL_CTX:
diff --git a/lib/ioctl_wrappers.c b/lib/ioctl_wrappers.c
index 87511fc6..65357ba7 100644
--- a/lib/ioctl_wrappers.c
+++ b/lib/ioctl_wrappers.c
@@ -894,6 +894,21 @@ int gem_madvise(int fd, uint32_t handle, int state)
 	return madv.retained;
 }
 
+int __gem_context_create(int fd, uint32_t *ctx_id)
+{
+	struct drm_i915_gem_context_create create;
+	int err = 0;
+
+	memset(&create, 0, sizeof(create));
+	if (igt_ioctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE, &create) == 0)
+		*ctx_id = create.ctx_id;
+	else
+		err = -errno;
+
+	errno = 0;
+	return err;
+}
+
 /**
  * gem_context_create:
  * @fd: open i915 drm file descriptor
@@ -906,18 +921,27 @@ int gem_madvise(int fd, uint32_t handle, int state)
  */
 uint32_t gem_context_create(int fd)
 {
-	struct drm_i915_gem_context_create create;
+	uint32_t ctx_id;
 
-	memset(&create, 0, sizeof(create));
-	if (igt_ioctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE, &create)) {
-		int err = -errno;
-		igt_skip_on(err == -ENODEV || errno == -EINVAL);
-		igt_assert_eq(err, 0);
-	}
-	igt_assert(create.ctx_id != 0);
-	errno = 0;
+	gem_require_contexts(fd);
+
+	igt_assert_eq(__gem_context_create(fd, &ctx_id), 0);
+	igt_assert(ctx_id != 0);
+
+	return ctx_id;
+}
 
-	return create.ctx_id;
+/**
+ * gem_require_contexts:
+ * @fd: open i915 drm file descriptor
+ *
+ * This helper will automatically skip the test on platforms where context
+ * support is not available.
+ */
+void gem_require_contexts(int fd)
+{
+	uint32_t ctx_id;
+	igt_require(__gem_context_create(fd, &ctx_id) != -ENODEV);
 }
 
 int __gem_context_destroy(int fd, uint32_t ctx_id)
diff --git a/lib/ioctl_wrappers.h b/lib/ioctl_wrappers.h
index 1663b7f8..0155c6c6 100644
--- a/lib/ioctl_wrappers.h
+++ b/lib/ioctl_wrappers.h
@@ -119,6 +119,7 @@ int gem_munmap(void *ptr, uint64_t size);
 
 int gem_madvise(int fd, uint32_t handle, int state);
 
+int __gem_context_create(int fd, uint32_t *ctx_id);
 uint32_t gem_context_create(int fd);
 void gem_context_destroy(int fd, uint32_t ctx_id);
 int __gem_context_destroy(int fd, uint32_t ctx_id);
@@ -133,6 +134,7 @@ struct local_i915_gem_context_param {
 #define LOCAL_CONTEXT_PARAM_BANNABLE	0x5
 	uint64_t value;
 };
+void gem_require_contexts(int fd);
 void gem_context_require_bannable(int fd);
 void gem_context_require_param(int fd, uint64_t param);
 void gem_context_get_param(int fd, struct local_i915_gem_context_param *p);
diff --git a/tests/gem_ctx_switch.c b/tests/gem_ctx_switch.c
index b6ea71cf..43105fea 100644
--- a/tests/gem_ctx_switch.c
+++ b/tests/gem_ctx_switch.c
@@ -45,19 +45,6 @@
 
 #define INTERRUPTIBLE 1
 
-static int __gem_context_create(int fd, uint32_t *ctx_id)
-{
-	struct drm_i915_gem_context_create arg;
-	int ret = 0;
-
-	memset(&arg, 0, sizeof(arg));
-	if (drmIoctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE, &arg))
-		ret = -errno;
-
-	*ctx_id = arg.ctx_id;
-	return ret;
-}
-
 static double elapsed(const struct timespec *start, const struct timespec *end)
 {
 	return ((end->tv_sec - start->tv_sec) +
diff --git a/tests/gem_eio.c b/tests/gem_eio.c
index 608b2dfd..138e8a17 100644
--- a/tests/gem_eio.c
+++ b/tests/gem_eio.c
@@ -207,17 +207,6 @@ static void test_inflight(int fd)
 	}
 }
 
-static uint32_t __gem_context_create(int fd)
-{
-	struct drm_i915_gem_context_create create;
-
-	memset(&create, 0, sizeof(create));
-	if (ioctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE, &create))
-		return 0;
-
-	return create.ctx_id;
-}
-
 static void test_inflight_contexts(int fd)
 {
 	struct drm_i915_gem_execbuffer2 execbuf;
@@ -229,7 +218,7 @@ static void test_inflight_contexts(int fd)
 
 	igt_require(gem_has_exec_fence(fd));
 
-	ctx[0] = __gem_context_create(fd);
+	ctx[0] = gem_context_create(fd);
 	igt_require(ctx[0]);
 	for (unsigned int n = 1; n < ARRAY_SIZE(ctx); n++)
 		ctx[n] = gem_context_create(fd);
diff --git a/tests/gem_exec_await.c b/tests/gem_exec_await.c
index fb5c0f30..3a14882e 100644
--- a/tests/gem_exec_await.c
+++ b/tests/gem_exec_await.c
@@ -55,15 +55,6 @@ static bool ignore_engine(int fd, unsigned engine)
 	return false;
 }
 
-static uint32_t __gem_context_create(int fd)
-{
-	struct drm_i915_gem_context_create arg;
-
-	memset(&arg, 0, sizeof(arg));
-	drmIoctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE, &arg);
-	return arg.ctx_id;
-}
-
 static void xchg_obj(void *array, unsigned i, unsigned j)
 {
 	struct drm_i915_gem_exec_object2 *obj = array;
@@ -130,8 +121,7 @@ static void wide(int fd, int ring_size, int timeout, unsigned int flags)
 					 LOCAL_I915_EXEC_HANDLE_LUT);
 
 		if (flags & CONTEXTS) {
-			exec[e].execbuf.rsvd1 = __gem_context_create(fd);
-			igt_require(exec[e].execbuf.rsvd1);
+			exec[e].execbuf.rsvd1 = gem_context_create(fd);
 		}
 
 		exec[e].exec[0].handle = gem_create(fd, 4096);
@@ -174,7 +164,7 @@ static void wide(int fd, int ring_size, int timeout, unsigned int flags)
 
 			if (flags & CONTEXTS) {
 				gem_context_destroy(fd, exec[e].execbuf.rsvd1);
-				exec[e].execbuf.rsvd1 = __gem_context_create(fd);
+				exec[e].execbuf.rsvd1 = gem_context_create(fd);
 			}
 
 			exec[e].reloc.presumed_offset = exec[e].exec[1].offset;
diff --git a/tests/gem_exec_nop.c b/tests/gem_exec_nop.c
index 0af64557..151b39db 100644
--- a/tests/gem_exec_nop.c
+++ b/tests/gem_exec_nop.c
@@ -365,19 +365,6 @@ static void xchg(void *array, unsigned i, unsigned j)
 	u[j] = tmp;
 }
 
-static int __gem_context_create(int fd, uint32_t *ctx_id)
-{
-	struct drm_i915_gem_context_create arg;
-	int ret = 0;
-
-	memset(&arg, 0, sizeof(arg));
-	if (drmIoctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE, &arg))
-		ret = -errno;
-
-	*ctx_id = arg.ctx_id;
-	return ret;
-}
-
 static void sequential(int fd, uint32_t handle, unsigned flags, int timeout)
 {
 	const int ncpus = flags & FORKED ? sysconf(_SC_NPROCESSORS_ONLN) : 1;
diff --git a/tests/gem_exec_parallel.c b/tests/gem_exec_parallel.c
index 1c53bd64..5c0b027b 100644
--- a/tests/gem_exec_parallel.c
+++ b/tests/gem_exec_parallel.c
@@ -55,20 +55,11 @@ static void check_bo(int fd, uint32_t handle, int pass)
 	munmap(map, 4096);
 }
 
-static uint32_t __gem_context_create(int fd)
-{
-	struct drm_i915_gem_context_create arg;
-
-	memset(&arg, 0, sizeof(arg));
-	if (drmIoctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE, &arg) == 0)
-		gem_context_destroy(fd, arg.ctx_id);
-
-	return arg.ctx_id;
-}
-
 static void gem_require_context(int fd)
 {
-	igt_require(__gem_context_create(fd));
+	uint32_t ctx_id = 0;
+	__gem_context_create(fd, &ctx_id);
+	igt_require(ctx_id);
 }
 
 static bool ignore_engine(int fd, unsigned engine)
diff --git a/tests/gem_exec_reuse.c b/tests/gem_exec_reuse.c
index 4e3907cf..11185de1 100644
--- a/tests/gem_exec_reuse.c
+++ b/tests/gem_exec_reuse.c
@@ -56,19 +56,6 @@ static void noop(struct noop *n,
 	gem_execbuf(n->fd, &execbuf);
 }
 
-static int __gem_context_create(int fd, uint32_t *ctx_id)
-{
-	struct drm_i915_gem_context_create arg;
-	int ret = 0;
-
-	memset(&arg, 0, sizeof(arg));
-	if (drmIoctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE, &arg))
-		ret = -errno;
-
-	*ctx_id = arg.ctx_id;
-	return ret;
-}
-
 static int fls(uint64_t x)
 {
 	int t;
diff --git a/tests/gem_exec_whisper.c b/tests/gem_exec_whisper.c
index 15989616..00eb4c8c 100644
--- a/tests/gem_exec_whisper.c
+++ b/tests/gem_exec_whisper.c
@@ -79,19 +79,6 @@ static void verify_reloc(int fd, uint32_t handle,
 	}
 }
 
-static int __gem_context_create(int fd, uint32_t *ctx_id)
-{
-	struct drm_i915_gem_context_create arg;
-	int ret = 0;
-
-	memset(&arg, 0, sizeof(arg));
-	if (drmIoctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE, &arg))
-		ret = -errno;
-
-	*ctx_id = arg.ctx_id;
-	return ret;
-}
-
 static bool ignore_engine(int fd, unsigned engine)
 {
 	if (engine == 0)
-- 
2.14.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [i-g-t 2/2] tests/gem_reset_stats: Add client ban test
  2017-10-12 22:10 [PATCH i-g-t 1/2] lib: Move __gem_context_create to common ioctl wrapper library Antonio Argenziano
@ 2017-10-12 22:10 ` Antonio Argenziano
  2017-10-12 22:21   ` Antonio Argenziano
  2017-10-12 22:32   ` Chris Wilson
  2017-10-12 22:15 ` [PATCH i-g-t 1/2] lib: Move __gem_context_create to common ioctl wrapper library Chris Wilson
  2017-10-12 22:23 ` ✗ Fi.CI.BAT: failure for series starting with [1/2] " Patchwork
  2 siblings, 2 replies; 6+ messages in thread
From: Antonio Argenziano @ 2017-10-12 22:10 UTC (permalink / raw)
  To: intel-gfx

When a client gets a fixed amount of its contexts banned, will be
blocked from creating any new contexts itself. This patch adds a test
for this feature.

Signed-off-by: Antonio Argenziano <antonio.argenziano@intel.com>
Cc: Michel Thierry <michel.thierry@intel.com>
---
 tests/gem_ctx_create.c  | 10 +++++-----
 tests/gem_reset_stats.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 52 insertions(+), 5 deletions(-)

diff --git a/tests/gem_ctx_create.c b/tests/gem_ctx_create.c
index ae0825a1..abe9a32e 100644
--- a/tests/gem_ctx_create.c
+++ b/tests/gem_ctx_create.c
@@ -45,7 +45,7 @@ static unsigned all_nengine;
 static unsigned ppgtt_engines[16];
 static unsigned ppgtt_nengine;
 
-static int __gem_context_create(int fd, struct drm_i915_gem_context_create *arg)
+static int __gem_context_create_local(int fd, struct drm_i915_gem_context_create *arg)
 {
 	int ret = 0;
 	if (drmIoctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE, arg))
@@ -255,7 +255,7 @@ static void maximum(int fd, int ncpus, unsigned mode)
 
 		err = -ENOMEM;
 		if (avail_mem > (count + 1) * ctx_size)
-			err = __gem_context_create(fd, &create);
+			err = __gem_context_create_local(fd, &create);
 		if (err) {
 			igt_info("Created %lu contexts, before failing with '%s' [%d]\n",
 				 count, strerror(-err), -err);
@@ -322,7 +322,7 @@ igt_main
 		igt_require_gem(fd);
 
 		memset(&create, 0, sizeof(create));
-		igt_require(__gem_context_create(fd, &create) == 0);
+		igt_require(__gem_context_create_local(fd, &create) == 0);
 		gem_context_destroy(fd, create.ctx_id);
 
 		for_each_engine(fd, engine) {
@@ -347,7 +347,7 @@ igt_main
 		memset(&create, 0, sizeof(create));
 		create.ctx_id = rand();
 		create.pad = 0;
-		igt_assert_eq(__gem_context_create(fd, &create), 0);
+		igt_assert_eq(__gem_context_create_local(fd, &create), 0);
 		igt_assert(create.ctx_id != 0);
 		gem_context_destroy(fd, create.ctx_id);
 	}
@@ -356,7 +356,7 @@ igt_main
 		memset(&create, 0, sizeof(create));
 		create.ctx_id = rand();
 		create.pad = 1;
-		igt_assert_eq(__gem_context_create(fd, &create), -EINVAL);
+		igt_assert_eq(__gem_context_create_local(fd, &create), -EINVAL);
 	}
 
 	igt_subtest("maximum-mem")
diff --git a/tests/gem_reset_stats.c b/tests/gem_reset_stats.c
index edc40767..f51475a9 100644
--- a/tests/gem_reset_stats.c
+++ b/tests/gem_reset_stats.c
@@ -438,6 +438,50 @@ static void test_ban_ctx(const struct intel_execution_engine *e)
 	close(fd);
 }
 
+#define CLIENT_BAN 4
+#define CTX_BAN 5
+static void test_client_ban(const struct intel_execution_engine *e)
+{
+	int fd_bad,fd_good;
+	struct local_drm_i915_reset_stats rs_bad, rs_good;
+	int ctx_bans;
+	uint32_t ctx_bad[CLIENT_BAN];
+	uint32_t test_ctx;
+
+	fd_bad = drm_open_driver(DRIVER_INTEL);
+	fd_good = drm_open_driver(DRIVER_INTEL);
+
+	assert_reset_status(fd_bad, fd_bad, 0, RS_NO_ERROR);
+	assert_reset_status(fd_good, fd_good, 0, RS_NO_ERROR);
+
+	for (int i = 0; i < CLIENT_BAN; i++) {
+		ctx_bad[i] = gem_context_create(fd_bad);
+		noop(fd_bad, ctx_bad[i], e);
+		assert_reset_status(fd_bad, fd_bad, ctx_bad[i], RS_NO_ERROR);
+
+		ctx_bans = CTX_BAN;
+		while (ctx_bans--)
+			inject_hang(fd_bad, ctx_bad[i], e, BAN);
+
+		igt_assert_eq(noop(fd_bad, ctx_bad[i], e), -EIO);
+
+		assert_reset_status(fd_bad, fd_bad, ctx_bad[i], RS_BATCH_ACTIVE);
+		igt_assert_eq(gem_reset_stats(fd_bad, ctx_bad[i], &rs_bad), 0);
+		igt_assert_eq(rs_bad.batch_active, CTX_BAN);
+	}
+
+	igt_assert_eq(__gem_context_create(fd_bad, &test_ctx), -EIO);
+	igt_info("Client banned after %d bad contexts\n", CLIENT_BAN);
+
+	igt_assert_lt(0, noop(fd_good, 0, e));
+	assert_reset_status(fd_good, fd_good, 0, RS_NO_ERROR);
+	igt_assert_eq(gem_reset_stats(fd_good, 0, &rs_good), 0);
+	igt_assert_eq(rs_good.batch_active, 0);
+
+	close(fd_bad);
+	close(fd_good);
+}
+
 static void test_unrelated_ctx(const struct intel_execution_engine *e)
 {
 	int fd1,fd2;
@@ -817,6 +861,9 @@ igt_main
 		igt_subtest_f("ban-ctx-%s", e->name)
 			RUN_CTX_TEST(test_ban_ctx(e));
 
+		igt_subtest_f("ban-client-%s", e->name)
+			RUN_CTX_TEST(test_client_ban(e));
+
 		igt_subtest_f("reset-count-%s", e->name)
 			RUN_TEST(test_reset_count(e, false));
 
-- 
2.14.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH i-g-t 1/2] lib: Move __gem_context_create to common ioctl wrapper library.
  2017-10-12 22:10 [PATCH i-g-t 1/2] lib: Move __gem_context_create to common ioctl wrapper library Antonio Argenziano
  2017-10-12 22:10 ` [i-g-t 2/2] tests/gem_reset_stats: Add client ban test Antonio Argenziano
@ 2017-10-12 22:15 ` Chris Wilson
  2017-10-12 22:23 ` ✗ Fi.CI.BAT: failure for series starting with [1/2] " Patchwork
  2 siblings, 0 replies; 6+ messages in thread
From: Chris Wilson @ 2017-10-12 22:15 UTC (permalink / raw)
  To: Antonio Argenziano, intel-gfx

Quoting Antonio Argenziano (2017-10-12 23:10:36)
> +/**
> + * gem_require_contexts:
> + * @fd: open i915 drm file descriptor
> + *
> + * This helper will automatically skip the test on platforms where context
> + * support is not available.
> + */
> +void gem_require_contexts(int fd)
> +{
> +       uint32_t ctx_id;
> +       igt_require(__gem_context_create(fd, &ctx_id) != -ENODEV);

Leaks on success.

Otherwise, perfect.
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [i-g-t 2/2] tests/gem_reset_stats: Add client ban test
  2017-10-12 22:10 ` [i-g-t 2/2] tests/gem_reset_stats: Add client ban test Antonio Argenziano
@ 2017-10-12 22:21   ` Antonio Argenziano
  2017-10-12 22:32   ` Chris Wilson
  1 sibling, 0 replies; 6+ messages in thread
From: Antonio Argenziano @ 2017-10-12 22:21 UTC (permalink / raw)
  To: intel-gfx



On 12/10/17 15:10, Antonio Argenziano wrote:
> When a client gets a fixed amount of its contexts banned, will be
> blocked from creating any new contexts itself. This patch adds a test
> for this feature.
> 
> Signed-off-by: Antonio Argenziano <antonio.argenziano@intel.com>
> Cc: Michel Thierry <michel.thierry@intel.com>
> ---
>   tests/gem_ctx_create.c  | 10 +++++-----
>   tests/gem_reset_stats.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
>   2 files changed, 52 insertions(+), 5 deletions(-)
> 
> diff --git a/tests/gem_ctx_create.c b/tests/gem_ctx_create.c
> index ae0825a1..abe9a32e 100644
> --- a/tests/gem_ctx_create.c
> +++ b/tests/gem_ctx_create.c
> @@ -45,7 +45,7 @@ static unsigned all_nengine;
>   static unsigned ppgtt_engines[16];
>   static unsigned ppgtt_nengine;
>   
> -static int __gem_context_create(int fd, struct drm_i915_gem_context_create *arg)
> +static int __gem_context_create_local(int fd, struct drm_i915_gem_context_create *arg)
>   {
>   	int ret = 0;
>   	if (drmIoctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE, arg))
> @@ -255,7 +255,7 @@ static void maximum(int fd, int ncpus, unsigned mode)
>   
>   		err = -ENOMEM;
>   		if (avail_mem > (count + 1) * ctx_size)
> -			err = __gem_context_create(fd, &create);
> +			err = __gem_context_create_local(fd, &create);
>   		if (err) {
>   			igt_info("Created %lu contexts, before failing with '%s' [%d]\n",
>   				 count, strerror(-err), -err);
> @@ -322,7 +322,7 @@ igt_main
>   		igt_require_gem(fd);
>   
>   		memset(&create, 0, sizeof(create));
> -		igt_require(__gem_context_create(fd, &create) == 0);
> +		igt_require(__gem_context_create_local(fd, &create) == 0);
>   		gem_context_destroy(fd, create.ctx_id);
>   
>   		for_each_engine(fd, engine) {
> @@ -347,7 +347,7 @@ igt_main
>   		memset(&create, 0, sizeof(create));
>   		create.ctx_id = rand();
>   		create.pad = 0;
> -		igt_assert_eq(__gem_context_create(fd, &create), 0);
> +		igt_assert_eq(__gem_context_create_local(fd, &create), 0);
>   		igt_assert(create.ctx_id != 0);
>   		gem_context_destroy(fd, create.ctx_id);
>   	}
> @@ -356,7 +356,7 @@ igt_main
>   		memset(&create, 0, sizeof(create));
>   		create.ctx_id = rand();
>   		create.pad = 1;
> -		igt_assert_eq(__gem_context_create(fd, &create), -EINVAL);
> +		igt_assert_eq(__gem_context_create_local(fd, &create), -EINVAL);
>   	}
>   
>   	igt_subtest("maximum-mem")

Ops, this was supposed to be in patch 1/2.
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 6+ messages in thread

* ✗ Fi.CI.BAT: failure for series starting with [1/2] lib: Move __gem_context_create to common ioctl wrapper library.
  2017-10-12 22:10 [PATCH i-g-t 1/2] lib: Move __gem_context_create to common ioctl wrapper library Antonio Argenziano
  2017-10-12 22:10 ` [i-g-t 2/2] tests/gem_reset_stats: Add client ban test Antonio Argenziano
  2017-10-12 22:15 ` [PATCH i-g-t 1/2] lib: Move __gem_context_create to common ioctl wrapper library Chris Wilson
@ 2017-10-12 22:23 ` Patchwork
  2 siblings, 0 replies; 6+ messages in thread
From: Patchwork @ 2017-10-12 22:23 UTC (permalink / raw)
  To: Antonio Argenziano; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/2] lib: Move __gem_context_create to common ioctl wrapper library.
URL   : https://patchwork.freedesktop.org/series/31857/
State : failure

== Summary ==

Series 31857 revision 1 was fully merged or fully failed: no git log

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [i-g-t 2/2] tests/gem_reset_stats: Add client ban test
  2017-10-12 22:10 ` [i-g-t 2/2] tests/gem_reset_stats: Add client ban test Antonio Argenziano
  2017-10-12 22:21   ` Antonio Argenziano
@ 2017-10-12 22:32   ` Chris Wilson
  1 sibling, 0 replies; 6+ messages in thread
From: Chris Wilson @ 2017-10-12 22:32 UTC (permalink / raw)
  To: Antonio Argenziano, intel-gfx

Quoting Antonio Argenziano (2017-10-12 23:10:37)
> When a client gets a fixed amount of its contexts banned, will be
> blocked from creating any new contexts itself. This patch adds a test
> for this feature.

Fixed by whom?

The "feature" is a primitive DoS prevention. Atm it is purely
implementation defined as we don't have a "service level agreement" to
describe exactly what can be expected. It is certainly not an ABI one
client can rely on for itself, more a general effect about how much
interruption a client can expect from any other.

So how do you define such behaviour? Do we want to carve the "three
strikes" rule into stone? How about when the malicious client creates
new contexts to avoid the strikes? How about when a malicious client
decides to try and DoS its common parent (e.g firefox and multiple
webgl, with one bad apple trying to upset the barrel)?

At the end of the day, limits will be imposed in exactly the same way as
for traditional processes, and gpu resources will be managed and
scheduled under the same umbrella. From that viewpoint, everything we do
today will have to undergo radical change. So consider careful what you
want to record as user ABI. Atm, userspace requires support for
ARB_context_robustness and we have not been asked for anything more.
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-10-12 22:32 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-12 22:10 [PATCH i-g-t 1/2] lib: Move __gem_context_create to common ioctl wrapper library Antonio Argenziano
2017-10-12 22:10 ` [i-g-t 2/2] tests/gem_reset_stats: Add client ban test Antonio Argenziano
2017-10-12 22:21   ` Antonio Argenziano
2017-10-12 22:32   ` Chris Wilson
2017-10-12 22:15 ` [PATCH i-g-t 1/2] lib: Move __gem_context_create to common ioctl wrapper library Chris Wilson
2017-10-12 22:23 ` ✗ Fi.CI.BAT: failure for series starting with [1/2] " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox