[igt-dev] [PATCH i-g-t] tests/i915/gem_ctx_create: add two multi-gpu subtests
Kamil Konieczny
kamil.konieczny at linux.intel.com
Fri Jan 20 12:28:57 UTC 2023
Create two multi-gpu tests for basic functionality. Also
while at it improve a little subtest basic and check if
we get context id we requested. Add also a helper for creating
non-zero random number.
Cc: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
Signed-off-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
---
tests/i915/gem_ctx_create.c | 71 +++++++++++++++++++++++++++++++++----
1 file changed, 64 insertions(+), 7 deletions(-)
diff --git a/tests/i915/gem_ctx_create.c b/tests/i915/gem_ctx_create.c
index 39f070af..4d12e769 100644
--- a/tests/i915/gem_ctx_create.c
+++ b/tests/i915/gem_ctx_create.c
@@ -34,6 +34,7 @@
#include "i915/gem_create.h"
#include "igt.h"
#include "igt_rand.h"
+#include "lib/igt_device_scan.h"
#include "sw_sync.h"
IGT_TEST_DESCRIPTION("Test the context create ioctls");
@@ -558,12 +559,36 @@ static void iris_pipeline(int i915)
#endif /* I915_DEFINE_CONTEXT_PARAM_ENGINES */
}
+static int nonzero_rand(void)
+{
+ int i, r;
+
+ for (i = 0, r = rand(); r == 0 && i <= 1; i++)
+ r = rand();
+
+ igt_assert_f(r, "rand() error\n");
+
+ return r;
+}
+
+static void test_create_id(int fd, uint32_t id)
+{
+ struct drm_i915_gem_context_create create;
+
+ igt_assert(id != 0);
+ memset(&create, 0, sizeof(create));
+ create.ctx_id = id;
+ igt_assert_eq(create_ioctl(fd, &create), 0);
+ gem_context_destroy(fd, create.ctx_id);
+ igt_assert(create.ctx_id == id);
+}
+
igt_main
{
const int ncpus = sysconf(_SC_NPROCESSORS_ONLN);
- struct drm_i915_gem_context_create create;
const struct intel_execution_engine2 *e;
intel_ctx_cfg_t cfg;
+ int gpu_count;
int fd = -1;
igt_fixture {
@@ -589,12 +614,7 @@ igt_main
igt_describe("Test random context creation");
igt_subtest("basic") {
- memset(&create, 0, sizeof(create));
- create.ctx_id = rand();
- create.pad = 0;
- igt_assert_eq(create_ioctl(fd, &create), 0);
- igt_assert(create.ctx_id != 0);
- gem_context_destroy(fd, create.ctx_id);
+ test_create_id(fd, nonzero_rand());
}
igt_describe("Verify valid and invalid context extensions");
@@ -668,5 +688,42 @@ igt_main
igt_fixture {
igt_stop_hang_detector();
close(fd);
+ gpu_count = igt_device_filter_count();
+ }
+
+ igt_describe("Test context creation on multi-GPU machine");
+ igt_subtest("multigpu-basic") {
+ igt_require(gpu_count > 1);
+
+ igt_multi_fork(child, gpu_count) {
+ int gpu_fd = __drm_open_driver_another(child, DRIVER_INTEL);
+
+ igt_assert(gpu_fd > 0);
+ test_create_id(gpu_fd, nonzero_rand());
+ close(gpu_fd);
+ }
+
+ igt_waitchildren();
+ }
+
+ igt_describe("Exercise implicit per-fd context creation on multi-GPU machine");
+ igt_subtest("multigpu-basic-files")
+ {
+ igt_require(gpu_count > 1);
+ igt_multi_fork(child, gpu_count) {
+ int gpu_fd = __drm_open_driver_another(child, DRIVER_INTEL);
+ intel_ctx_cfg_t gpu_cfg;
+
+ igt_assert(gpu_fd > 0);
+ igt_fork_hang_detector(gpu_fd);
+ gpu_cfg = intel_ctx_cfg_all_physical(gpu_fd);
+
+ files(gpu_fd, &gpu_cfg, 2, 1);
+
+ igt_stop_hang_detector();
+ close(gpu_fd);
+ }
+
+ igt_waitchildren();
}
}
--
2.37.2
More information about the igt-dev
mailing list