[PATCH i-g-t 3/3] tests/xe_intel_bb: check multithreading rescans won't segfault
Lucas De Marchi
lucas.demarchi at intel.com
Thu Jan 23 17:34:36 UTC 2025
On Thu, Jan 23, 2025 at 10:22:10AM +0100, Zbigniew Kempczyński wrote:
>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);
can you point what test needs this? In this scenario, don't we usually
use igt_fork() for the tests?
Lucas De Marchi
>+ 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