[PATCH i-g-t 3/3] tests/xe_intel_bb: check multithreading rescans won't segfault
Zbigniew Kempczyński
zbigniew.kempczynski at intel.com
Thu Jan 23 09:22:10 UTC 2025
This test is likely only for checking purposes, it doesn't makes
sense to merge it after series review.
Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
Cc: Lucas De Marchi <lucas.demarchi at intel.com>
Cc: Kamil Konieczny <kamil.konieczny at linux.intel.com>
---
tests/intel-ci/xe-fast-feedback.testlist | 1 +
tests/intel/xe_intel_bb.c | 47 ++++++++++++++++++++++++
2 files changed, 48 insertions(+)
diff --git a/tests/intel-ci/xe-fast-feedback.testlist b/tests/intel-ci/xe-fast-feedback.testlist
index 0234d3e72d..7adb9a3436 100644
--- a/tests/intel-ci/xe-fast-feedback.testlist
+++ b/tests/intel-ci/xe-fast-feedback.testlist
@@ -7,6 +7,7 @@ igt at fbdev@nullptr
igt at fbdev@read
igt at fbdev@write
+igt at xe_intel_bb@multithread-open
igt at kms_addfb_basic@addfb25-4-tiled
igt at kms_addfb_basic@addfb25-bad-modifier
igt at kms_addfb_basic@addfb25-modifier-no-flag
diff --git a/tests/intel/xe_intel_bb.c b/tests/intel/xe_intel_bb.c
index 845052bf26..5df009f9ed 100644
--- a/tests/intel/xe_intel_bb.c
+++ b/tests/intel/xe_intel_bb.c
@@ -18,6 +18,7 @@
#include "igt.h"
#include "igt_crc.h"
+#include "igt_device_scan.h"
#include "intel_blt.h"
#include "intel_bufops.h"
#include "intel_mocs.h"
@@ -950,6 +951,49 @@ static int render(struct buf_ops *bops, uint32_t tiling,
return fails;
}
+/**
+ * SUBTEST: multithread-open
+ * Description: check device scanning when multiple threads are involved
+ */
+static void *__single_open(void *data)
+{
+ struct igt_device_card card;
+ int fd;
+
+ igt_info("Thread: %d\n", (int)to_user_pointer(data));
+
+ for (int i = 0; i < 5; i++)
+ igt_devices_scan();
+
+ igt_assert_eq(igt_device_card_match("pci:vendor=intel", &card), true);
+ igt_info("Device detail: %s, %s, %s\n", card.subsystem, card.card, card.render);
+
+ fd = igt_open_card(&card);
+ igt_info("Fd: %d\n", fd);
+ igt_assert(fd >= 0);
+ close(fd);
+
+ return NULL;
+}
+
+#define NUM_THREADS 100
+static void multithread_open(void)
+{
+ pthread_t pth[NUM_THREADS];
+ int i, ret;
+
+ for (i = 0; i < NUM_THREADS; i++) {
+ ret = pthread_create(&pth[i], NULL, __single_open,
+ from_user_pointer(i));
+ igt_assert_eq(ret, 0);
+ }
+
+ for (i = 0; i < NUM_THREADS; i++) {
+ ret = pthread_join(pth[i], NULL);
+ igt_assert_eq(ret, 0);
+ }
+}
+
static int opt_handler(int opt, int opt_index, void *data)
{
switch (opt) {
@@ -1063,6 +1107,9 @@ igt_main_args("dpib", NULL, help_str, opt_handler, NULL)
}
}
+ igt_subtest("multithread-open")
+ multithread_open();
+
igt_fixture {
buf_ops_destroy(bops);
drm_close_driver(xe);
--
2.34.1
More information about the igt-dev
mailing list