[igt-dev] [i-g-t, V2] tests/i915/gem_exec_balancer: bonding support check in invalid-balancer
Tejas Upadhyay
tejaskumarx.surendrakumar.upadhyay at intel.com
Tue Dec 14 12:51:32 UTC 2021
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 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..ab095899 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;
+}
+
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;
/*
* 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
More information about the igt-dev
mailing list