[igt-dev] [PATCH i-g-t 27/93] tests/i915/sysfs_clients: Convert to intel_ctx_t

Zbigniew Kempczyński zbigniew.kempczynski at intel.com
Thu Jun 10 09:34:33 UTC 2021


On Wed, Jun 09, 2021 at 12:36:10PM -0500, Jason Ekstrand wrote:
> Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
> ---
>  tests/i915/sysfs_clients.c | 87 ++++++++++++++++++++------------------
>  1 file changed, 46 insertions(+), 41 deletions(-)
> 
> diff --git a/tests/i915/sysfs_clients.c b/tests/i915/sysfs_clients.c
> index 04636777..ab79ff18 100644
> --- a/tests/i915/sysfs_clients.c
> +++ b/tests/i915/sysfs_clients.c
> @@ -18,13 +18,13 @@
>  
>  #include "drmtest.h"
>  #include "i915/gem.h"
> -#include "i915/gem_context.h"
>  #include "i915/gem_create.h"
>  #include "i915/gem_engine_topology.h"
>  #include "i915/gem_mman.h"
>  #include "igt_aux.h"
>  #include "igt_dummyload.h"
>  #include "igt_sysfs.h"
> +#include "intel_ctx.h"
>  #include "ioctl_wrappers.h"
>  
>  #define __require_within_epsilon(x, ref, tol_up, tol_down) \
> @@ -393,34 +393,26 @@ static uint64_t measured_usleep(unsigned int usec)
>  	return igt_nsec_elapsed(&tv);
>  }
>  
> -static int reopen_client(int i915)
> -{
> -	int clone;
> -
> -	clone = gem_reopen_driver(i915);
> -	gem_context_copy_engines(i915, 0, clone, 0);
> -	close(i915);
> -
> -	return clone;
> -}
> -
>  static void
> -busy_one(int i915, int clients, const struct intel_execution_engine2 *e)
> +busy_one(int i915, int clients, const intel_ctx_cfg_t *cfg,
> +	 const struct intel_execution_engine2 *e)
>  {
>  	int64_t active, idle, old, other[MAX_CLASS];
>  	struct timespec tv;
> +	const intel_ctx_t *ctx;
>  	igt_spin_t *spin;
>  	uint64_t delay;
>  	int me;
>  
>  	/* Create a fresh client with 0 runtime */
> -	i915 = reopen_client(i915);
> +	i915 = gem_reopen_driver(i915);
>  
>  	me = find_me(clients, getpid());
>  	igt_assert(me != -1);
>  
> +	ctx = intel_ctx_create(i915, cfg);
>  	spin = igt_spin_new(i915,
> -			    gem_context_clone_with_engines(i915, 0),
> +			    .ctx = ctx,
>  			    .engine = e->flags,
>  			    .flags = IGT_SPIN_POLL_RUN);
>  	igt_spin_busywait_until_started(spin);
> @@ -472,7 +464,7 @@ busy_one(int i915, int clients, const struct intel_execution_engine2 *e)
>  		igt_assert(idle >= active);
>  	}
>  
> -	gem_context_destroy(i915, spin->execbuf.rsvd1);
> +	intel_ctx_destroy(i915, ctx);
>  
>  	/* And finally after the executing context is no more */
>  	old = read_runtime(me, e->class);
> @@ -513,28 +505,29 @@ busy_one(int i915, int clients, const struct intel_execution_engine2 *e)
>  	close(i915);
>  }
>  
> -static void busy_all(int i915, int clients)
> +static void busy_all(int i915, int clients, const intel_ctx_cfg_t *cfg)
>  {
>  	const struct intel_execution_engine2 *e;
>  	int64_t active[MAX_CLASS];
>  	int64_t idle[MAX_CLASS];
>  	int64_t old[MAX_CLASS];
>  	uint64_t classes = 0;
> +	const intel_ctx_t *ctx;
>  	igt_spin_t *spin;
>  	int expect = 0;
>  	int64_t delay;
>  	int me;
>  
>  	/* Create a fresh client with 0 runtime */
> -	i915 = reopen_client(i915);
> +	i915 = gem_reopen_driver(i915);
>  
>  	me = find_me(clients, getpid());
>  	igt_assert(me != -1);
>  
> -	spin = igt_spin_new(i915,
> -			    gem_context_clone_with_engines(i915, 0),
> +	ctx = intel_ctx_create(i915, cfg);
> +	spin = igt_spin_new(i915, .ctx = ctx,
>  			    .flags = IGT_SPIN_POLL_RUN);
> -	__for_each_physical_engine(i915, e) {
> +	for_each_ctx_engine(i915, ctx, e) {
>  		if (!gem_class_can_store_dword(i915, e->class))
>  			continue;
>  
> @@ -580,7 +573,7 @@ static void busy_all(int i915, int clients)
>  		igt_assert(idle[i] >= active[i]);
>  	}
>  
> -	gem_context_destroy(i915, spin->execbuf.rsvd1);
> +	intel_ctx_destroy(i915, ctx);
>  	igt_spin_free(i915, spin);
>  
>  	/* And finally after the executing context is no more */
> @@ -597,17 +590,19 @@ static void busy_all(int i915, int clients)
>  }
>  
>  static void
> -split_child(int i915, int clients,
> +split_child(int i915, int clients, const intel_ctx_cfg_t *cfg,
>  	    const struct intel_execution_engine2 *e,
>  	    int sv)
>  {
>  	int64_t runtime[2] = {};
> +	const intel_ctx_t *ctx;
>  	igt_spin_t *spin;
>  	int go = 1;
>  
> -	i915 = reopen_client(i915);
> +	i915 = gem_reopen_driver(i915);
>  
> -	spin = igt_spin_new(i915, .engine = e->flags);
> +	ctx = intel_ctx_create(i915, cfg);
> +	spin = igt_spin_new(i915, .ctx = ctx, .engine = e->flags);
>  	igt_spin_end(spin);
>  	gem_sync(i915, spin->handle);
>  
> @@ -627,12 +622,14 @@ split_child(int i915, int clients,
>  	igt_spin_free(i915, spin);
>  
>  	runtime[0] = read_runtime(find_me(clients, getpid()), e->class);
> +	intel_ctx_destroy(i915, ctx);
>  	write(sv, runtime, sizeof(runtime));
>  }
>  
>  static void
> -__split(int i915, int clients, const struct intel_execution_engine2 *e, int f,
> -	void (*fn)(int i915, int clients,
> +__split(int i915, int clients, const intel_ctx_cfg_t *cfg,
> +	const struct intel_execution_engine2 *e, int f,
> +	void (*fn)(int i915, int clients, const intel_ctx_cfg_t *cfg,
>  		   const struct intel_execution_engine2 *e,
>  		   int sv))
>  {
> @@ -653,7 +650,7 @@ __split(int i915, int clients, const struct intel_execution_engine2 *e, int f,
>  
>  		igt_assert(socketpair(AF_UNIX, SOCK_DGRAM, 0, c->sv) == 0);
>  		igt_fork(child, 1)
> -			fn(i915, clients, e, c->sv[1]);
> +			fn(i915, clients, cfg, e, c->sv[1]);
>  
>  		read(c->sv[0], &go, sizeof(go));
>  	}
> @@ -721,13 +718,14 @@ __split(int i915, int clients, const struct intel_execution_engine2 *e, int f,
>  }
>  
>  static void
> -split(int i915, int clients, const struct intel_execution_engine2 *e, int f)
> +split(int i915, int clients, const intel_ctx_cfg_t *cfg,
> +      const struct intel_execution_engine2 *e, int f)
>  {
> -	__split(i915, clients, e, f, split_child);
> +	__split(i915, clients, cfg, e, f, split_child);
>  }
>  
>  static void
> -sema_child(int i915, int clients,
> +sema_child(int i915, int clients, const intel_ctx_cfg_t *cfg,
>  	   const struct intel_execution_engine2 *e,
>  	   int sv)
>  {
> @@ -740,9 +738,12 @@ sema_child(int i915, int clients,
>  		.buffer_count = 1,
>  		.flags = e->flags,
>  	};
> +	const intel_ctx_t *ctx;
>  	uint32_t *cs, *sema;
>  
> -	i915 = reopen_client(i915);
> +	i915 = gem_reopen_driver(i915);
> +	ctx = intel_ctx_create(i915, cfg);
> +	execbuf.rsvd1 = ctx->id;
>  
>  	obj.handle = gem_create(i915, 4096);
>  	obj.offset = obj.handle << 12;
> @@ -772,6 +773,7 @@ sema_child(int i915, int clients,
>  	*sema = 0;
>  	gem_execbuf(i915, &execbuf);
>  	gem_close(i915, obj.handle);
> +	intel_ctx_destroy(i915, ctx);
>  
>  	write(sv, sema, sizeof(*sema));
>  	read(sv, sema, sizeof(*sema));
> @@ -795,9 +797,10 @@ sema_child(int i915, int clients,
>  }
>  
>  static void
> -sema(int i915, int clients, const struct intel_execution_engine2 *e, int f)
> +sema(int i915, int clients, const intel_ctx_cfg_t *cfg,
> +     const struct intel_execution_engine2 *e, int f)
>  {
> -	__split(i915, clients, e, f, sema_child);
> +	__split(i915, clients, cfg, e, f, sema_child);
>  }
>  
>  static int read_all(int clients, pid_t pid, int class, uint64_t *runtime)
> @@ -945,21 +948,23 @@ static bool has_busy(int clients)
>  static void test_busy(int i915, int clients)
>  {
>  	const struct intel_execution_engine2 *e;
> +	intel_ctx_cfg_t cfg;
>  	const int frac[] = { 10, 25, 50 };
>  
>  	igt_fixture {
>  		igt_require(gem_has_contexts(i915));
>  		igt_require(has_busy(clients));
> +		cfg = intel_ctx_cfg_all_physical(i915);
>  	}
>  
>  	igt_subtest_with_dynamic("busy") {
> -		__for_each_physical_engine(i915, e) {
> +		for_each_ctx_cfg_engine(i915, &cfg, e) {
>  			if (!gem_class_can_store_dword(i915, e->class))
>  				continue;
>  			igt_dynamic_f("%s", e->name) {
>  				gem_quiescent_gpu(i915);
>  				igt_fork(child, 1)
> -					busy_one(i915, clients, e);
> +					busy_one(i915, clients, &cfg, e);
>  				igt_waitchildren();
>  				gem_quiescent_gpu(i915);
>  			}
> @@ -968,7 +973,7 @@ static void test_busy(int i915, int clients)
>  		igt_dynamic("all") {
>  			gem_quiescent_gpu(i915);
>  			igt_fork(child, 1)
> -				busy_all(i915, clients);
> +				busy_all(i915, clients, &cfg);
>  			igt_waitchildren();
>  			gem_quiescent_gpu(i915);
>  		}
> @@ -976,10 +981,10 @@ static void test_busy(int i915, int clients)
>  
>  	for (int i = 0; i < ARRAY_SIZE(frac); i++) {
>  		igt_subtest_with_dynamic_f("split-%d", frac[i]) {
> -			__for_each_physical_engine(i915, e) {
> +			for_each_ctx_cfg_engine(i915, &cfg, e) {
>  				igt_dynamic_f("%s", e->name) {
>  					gem_quiescent_gpu(i915);
> -					split(i915, clients, e, frac[i]);
> +					split(i915, clients, &cfg, e, frac[i]);
>  					gem_quiescent_gpu(i915);
>  				}
>  			}
> @@ -994,13 +999,13 @@ static void test_busy(int i915, int clients)
>  
>  		for (int i = 0; i < ARRAY_SIZE(frac); i++) {
>  			igt_subtest_with_dynamic_f("sema-%d", frac[i]) {
> -				__for_each_physical_engine(i915, e) {
> +				for_each_ctx_cfg_engine(i915, &cfg, e) {
>  					if (!gem_class_has_mutable_submission(i915, e->class))
>  						continue;
>  
>  					igt_dynamic_f("%s", e->name) {
>  						igt_drop_caches_set(i915, DROP_RESET_ACTIVE);
> -						sema(i915, clients, e, frac[i]);
> +						sema(i915, clients, &cfg, e, frac[i]);
>  						gem_quiescent_gpu(i915);
>  					}
>  					igt_drop_caches_set(i915, DROP_RESET_ACTIVE);
> -- 
> 2.31.1

Looks ok.

Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>

--
Zbigniew

> 
> _______________________________________________
> igt-dev mailing list
> igt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev


More information about the igt-dev mailing list