[igt-dev] [PATCH i-g-t v5 04/11] tests/drm_import_export: Remove the test

Zbigniew Kempczyński zbigniew.kempczynski at intel.com
Wed Dec 14 16:47:40 UTC 2022


Test exercises libdrm prime operations what is about to remove from IGT.

Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
Cc: Petri Latvala <petri.latvala at intel.com>
Acked-by: Petri Latvala <petri.latvala at intel.com>
---
 tests/drm_import_export.c | 304 --------------------------------------
 tests/meson.build         |   1 -
 2 files changed, 305 deletions(-)
 delete mode 100644 tests/drm_import_export.c

diff --git a/tests/drm_import_export.c b/tests/drm_import_export.c
deleted file mode 100644
index 2dd2f3cb9f..0000000000
--- a/tests/drm_import_export.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Copyright © 2014 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- *    Daniel Vetter <daniel.vetter at ffwll.ch>
- */
-
-#include "igt.h"
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <drm.h>
-#include <i915_drm.h>
-#include <xf86drm.h>
-#include <intel_bufmgr.h>
-#include <errno.h>
-#include <pthread.h>
-#include <unistd.h>
-#include <sys/syscall.h>
-
-#include "i915/gem.h"
-
-#define DURATION 10
-IGT_TEST_DESCRIPTION("Basic check to verify the behaviour of libdrm bo for prime/flink");
-
-int fd;
-drm_intel_bufmgr *bufmgr;
-int fd1;
-drm_intel_bufmgr *bufmgr1;
-
-bool use_flink;
-
-static void new_buffers(void)
-{
-	unsigned int *buf1;
-	drm_intel_bo *bo1, *bo2;
-
-
-	bo1 = drm_intel_bo_alloc(bufmgr, "buf1",16384, 4096);
-	igt_assert(bo1);
-	drm_intel_bo_map(bo1, 1);
-	bo2 = drm_intel_bo_alloc(bufmgr, "buf2", 16384, 4096);
-	igt_assert(bo2);
-	drm_intel_bo_map(bo2, 1);
-
-	buf1 = (unsigned int *)bo1->virtual;
-	igt_assert(buf1);
-	memset(buf1, 0, 16384);
-	buf1[4000]=0x05000000;
-
-	drm_intel_bo_exec(bo1, 16384, NULL, 0,0);
-	drm_intel_bo_wait_rendering(bo1);
-
-	drm_intel_bo_unmap( bo1 );
-	drm_intel_bo_unreference(bo1);
-
-	drm_intel_bo_unmap( bo2 );
-	drm_intel_bo_unreference(bo2);
-}
-
-static void test_surfaces(drm_intel_bo *bo_shared)
-{
-	drm_intel_bo * bo;
-	int loop=2;
-
-	while(loop--) {
-		if (use_flink) {
-			uint32_t name;
-			drm_intel_bo_flink(bo_shared, &name);
-			bo = drm_intel_bo_gem_create_from_name(bufmgr,
-							       "shared resource",
-							       name);
-		} else {
-			int prime_fd;
-
-			drm_intel_bo_gem_export_to_prime(bo_shared, &prime_fd);
-			bo = drm_intel_bo_gem_create_from_prime(bufmgr,
-								prime_fd, 4096);
-			close(prime_fd);
-		}
-
-		igt_assert(bo);
-		new_buffers();
-		drm_intel_bo_unreference(bo);
-	}
-}
-
-static void start_test(void)
-{
-	igt_until_timeout(DURATION) {
-		drm_intel_bo * bo_shared;
-
-		bo_shared = drm_intel_bo_alloc(bufmgr1, "buf-shared",16384, 4096);
-		test_surfaces(bo_shared);
-		drm_intel_bo_unreference(bo_shared);
-	}
-}
-
-static void * test_thread(void * par)
-{
-#ifdef __linux__
-	igt_debug("start %ld\n", (long) gettid());
-#else
-	igt_debug("start %ld\n", (long) pthread_self());
-#endif
-	start_test();
-
-	return NULL;
-}
-
-struct import_race_thread_data {
-	int prime_fd;
-	uint32_t flink_name;
-	unsigned int stop;
-	pthread_mutex_t mutex;
-};
-
-/*
- * Attempt to import the bo. It is possible that GEM_CLOSE was already called
- * in different thread and from i915 point of view the handle is no longer
- * valid (thus create_from_prime/name should fail).
- */
-static void *import_close_thread(void *data)
-{
-	struct import_race_thread_data *t = (struct import_race_thread_data *)data;
-	drm_intel_bo *bo;
-	pthread_mutex_lock(&t->mutex);
-	while (!t->stop) {
-		pthread_mutex_unlock(&t->mutex);
-		bo = NULL;
-		if (use_flink)
-			bo = drm_intel_bo_gem_create_from_name(bufmgr, "buf-shared", t->flink_name);
-		else {
-			pthread_mutex_lock(&t->mutex);
-			if (t->prime_fd != -1) {
-				bo = drm_intel_bo_gem_create_from_prime(bufmgr, t->prime_fd, 4096);
-				pthread_mutex_unlock(&t->mutex);
-			}
-			else
-				/* Lock should be held on entering the loop */
-				continue;
-		}
-
-		if (bo == NULL) {
-			/*
-			 * If the bo is NULL it means that we've unreferenced in other
-			 * thread - therefore we should expect ENOENT
-			 */
-			igt_assert_eq(errno, ENOENT);
-		} else {
-			drm_intel_bo_unreference(bo);
-		}
-
-		pthread_mutex_lock(&t->mutex);
-	}
-	pthread_mutex_unlock(&t->mutex);
-
-	return NULL;
-}
-
-/*
- * It is possible to race between unreference of the underlying BO and importing
- * it from prime_fd/name. Verify that the behaviour of libdrm is consistent for
- * prime/flink.
- */
-static void test_import_close_race(void)
-{
-	pthread_t t;
-	drm_intel_bo *bo;
-	struct import_race_thread_data t_data;
-
-	memset(&t_data, 0, sizeof(t_data));
-	pthread_mutex_init(&t_data.mutex, NULL);
-	t_data.prime_fd = -1;
-
-	igt_assert_eq(pthread_create(&t, NULL, import_close_thread , &t_data), 0);
-
-	igt_until_timeout(DURATION) {
-		bo = drm_intel_bo_alloc(bufmgr, "buf-shared", 4096, 4096);
-		igt_assert(bo != NULL);
-		/*
-		 * We setup the test in such way, that create_from_* can race between
-		 * unreference. If we're using prime, prime_fd is always a valid fd.
-		 */
-		if (use_flink)
-			igt_assert_eq(drm_intel_bo_flink(bo, &(t_data.flink_name)), 0);
-		else {
-			pthread_mutex_lock(&t_data.mutex);
-			igt_assert_eq(drm_intel_bo_gem_export_to_prime(bo, &(t_data.prime_fd)), 0);
-			igt_assert_neq(t_data.prime_fd, -1);
-			pthread_mutex_unlock(&t_data.mutex);
-		}
-
-		drm_intel_bo_unreference(bo);
-
-		pthread_mutex_lock(&t_data.mutex);
-		close(t_data.prime_fd);
-		t_data.prime_fd = -1;
-		pthread_mutex_unlock(&t_data.mutex);
-	}
-
-	pthread_mutex_lock(&t_data.mutex);
-	t_data.stop = 1;
-	pthread_mutex_unlock(&t_data.mutex);
-
-	pthread_join(t, NULL);
-	pthread_mutex_destroy(&t_data.mutex);
-}
-
-pthread_t test_thread_id1;
-pthread_t test_thread_id2;
-pthread_t test_thread_id3;
-pthread_t test_thread_id4;
-
-igt_main {
-	igt_fixture {
-		fd1 = drm_open_driver(DRIVER_INTEL);
-		igt_require_gem(fd1);
-
-		bufmgr1 = drm_intel_bufmgr_gem_init(fd1, 8 *1024);
-		igt_require(bufmgr1);
-
-		drm_intel_bufmgr_gem_enable_reuse(bufmgr1);
-
-		fd = gem_reopen_driver(fd1);
-		bufmgr = drm_intel_bufmgr_gem_init(fd, 8 *1024);
-		igt_assert(bufmgr);
-
-		drm_intel_bufmgr_gem_enable_reuse(bufmgr);
-	}
-
-	igt_describe("Verify whether the behaviour of libdrm"
-		     " is consistent for flink or not.");
-	igt_subtest("import-close-race-flink") {
-		use_flink = true;
-		test_import_close_race();
-	}
-
-	igt_describe("Verify whether the behaviour of libdrm"
-		     " is consistent for prime or not.");
-	igt_subtest("import-close-race-prime") {
-		use_flink = false;
-		test_import_close_race();
-	}
-
-	igt_describe("Multithreaded test to validate the (lack of) locking in"
-		     " the flink code in libdrm.");
-	igt_subtest("flink") {
-		use_flink = true;
-
-		pthread_create(&test_thread_id1, NULL, test_thread, NULL);
-		pthread_create(&test_thread_id2, NULL, test_thread, NULL);
-		pthread_create(&test_thread_id3, NULL, test_thread, NULL);
-		pthread_create(&test_thread_id4, NULL, test_thread, NULL);
-
-		pthread_join(test_thread_id1, NULL);
-		pthread_join(test_thread_id2, NULL);
-		pthread_join(test_thread_id3, NULL);
-		pthread_join(test_thread_id4, NULL);
-	}
-
-	igt_describe("Multithreaded test to validate the (lack of) locking in"
-		     " the prime code in libdrm.");
-	igt_subtest("prime") {
-		use_flink = false;
-
-		pthread_create(&test_thread_id1, NULL, test_thread, NULL);
-		pthread_create(&test_thread_id2, NULL, test_thread, NULL);
-		pthread_create(&test_thread_id3, NULL, test_thread, NULL);
-		pthread_create(&test_thread_id4, NULL, test_thread, NULL);
-
-		pthread_join(test_thread_id1, NULL);
-		pthread_join(test_thread_id2, NULL);
-		pthread_join(test_thread_id3, NULL);
-		pthread_join(test_thread_id4, NULL);
-	}
-
-	igt_fixture {
-		close(fd);
-		close(fd1);
-	}
-}
diff --git a/tests/meson.build b/tests/meson.build
index 619c18b251..c6fe6a3ce6 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -10,7 +10,6 @@ test_progs = [
 	'dmabuf_sync_file',
 	'device_reset',
 	'drm_buddy',
-	'drm_import_export',
 	'drm_mm',
 	'drm_read',
 	'fbdev',
-- 
2.34.1



More information about the igt-dev mailing list