[igt-dev] [i-g-t, V3] tests/i915/gem_exec_balancer: bonding support check in invalid-balancer

Zbigniew Kempczyński zbigniew.kempczynski at intel.com
Wed Dec 15 10:03:28 UTC 2021


On Tue, Dec 14, 2021 at 06:29:02PM +0530, Tejas Upadhyay wrote:
> Bonding is disabled on GEN12+ platforms, except ones already
> supported by the i915 - TGL, RKL, and ADL-S.
> 
> Currently few tests are failing for same reason, with this
> change they should rightly skip with proper message.
> 
> Reference: https://cgit.freedesktop.org/drm-tip/commit/?id=ce7e75c7ef1bf8ea3d947da8c674d2f40fd7d734
> 
> Changes since V2 :
> 	- Solved checkpatch errors.
> Changes since V1 :
>         - use function to check bonding capability so that
>           we dont skip whole test in case bonding not supported.
> 
> Signed-off-by: Tejas Upadhyay <tejaskumarx.surendrakumar.upadhyay at intel.com>
> ---
>  tests/i915/gem_exec_balancer.c | 31 ++++++++++++++++++++++++++++++-
>  1 file changed, 30 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/i915/gem_exec_balancer.c b/tests/i915/gem_exec_balancer.c
> index d58734ab..0810f910 100644
> --- a/tests/i915/gem_exec_balancer.c
> +++ b/tests/i915/gem_exec_balancer.c
> @@ -180,6 +180,33 @@ __set_param_fresh_context(int i915, struct drm_i915_gem_context_param param)
>  	return err;
>  }
>  
> +static bool has_bonding(int i915)
> +{
> +	I915_DEFINE_CONTEXT_ENGINES_BOND(bonds[16], 1);
> +	I915_DEFINE_CONTEXT_PARAM_ENGINES(engines, 1);
> +	struct drm_i915_gem_context_param p = {
> +		.param = I915_CONTEXT_PARAM_ENGINES,
> +		.value = to_user_pointer(&engines),
> +		.size = sizeof(engines),
> +	};
> +	int ret;
> +
> +	memset(&engines, 0, sizeof(engines));
> +	igt_assert_eq(__set_param_fresh_context(i915, p), 0);
> +
> +	memset(bonds, 0, sizeof(bonds));
> +	for (int n = 0; n < ARRAY_SIZE(bonds); n++) {
> +		bonds[n].base.name = I915_CONTEXT_ENGINES_EXT_BOND;
> +		bonds[n].base.next_extension =
> +			n ? to_user_pointer(&bonds[n - 1]) : 0;
> +		bonds[n].num_bonds = 1;
> +	}
> +	engines.extensions = to_user_pointer(&bonds);
> +	ret = __set_param_fresh_context(i915, p);
> +
> +	return ret == -ENODEV ? false : true;
> +}
> +

Looks like candidate for library call but we drop bonding on newer
gens so it can stay here.

>  static void invalid_balancer(int i915)
>  {
>  	I915_DEFINE_CONTEXT_ENGINES_LOAD_BALANCE(balancer, 64);
> @@ -191,6 +218,7 @@ static void invalid_balancer(int i915)
>  	};
>  	uint32_t handle;
>  	void *ptr;
> +	bool bonding = false;

Initialization not necessary.
>  
>  	/*
>  	 * Assume that I915_CONTEXT_PARAM_ENGINE validates the array
> @@ -198,6 +226,7 @@ static void invalid_balancer(int i915)
>  	 * extension explodes.
>  	 */
>  
> +	bonding = has_bonding(i915);
>  	for (int class = 0; class < 32; class++) {
>  		struct i915_engine_class_instance *ci;
>  		unsigned int count;
> @@ -299,7 +328,7 @@ static void invalid_balancer(int i915)
>  
>  		munmap(ptr + 4096, 4096);
>  
> -		if (count >= 2) {
> +		if (count >= 2 && bonding) {
>  			/* You can't bond to a balanced engine */
>  			memset(&bond, 0, sizeof(bond));
>  			bond.base.name = I915_CONTEXT_ENGINES_EXT_BOND;
> -- 
> 2.31.1
> 

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



More information about the igt-dev mailing list