From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id CF16710E25B for ; Tue, 16 May 2023 15:45:51 +0000 (UTC) From: Dominik Grzegorzek To: igt-dev@lists.freedesktop.org Date: Tue, 16 May 2023 17:44:28 +0200 Message-Id: <20230516154434.810356-3-dominik.grzegorzek@intel.com> In-Reply-To: <20230516154434.810356-1-dominik.grzegorzek@intel.com> References: <20230516154434.810356-1-dominik.grzegorzek@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [igt-dev] [PATCH i-g-t 2/8] xe/xe_eudebug: test eudebug connection List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" List-ID: Add basic tests checking xe eudebug connection capability. Signed-off-by: Dominik Grzegorzek Signed-off-by: Mika Kuoppala --- tests/meson.build | 1 + tests/xe/xe_eudebug.c | 133 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 tests/xe/xe_eudebug.c diff --git a/tests/meson.build b/tests/meson.build index 38f080f7c..6f6b39e56 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -247,6 +247,7 @@ xe_progs = [ 'xe_compute', 'xe_dma_buf_sync', 'xe_debugfs', + 'xe_eudebug', 'xe_evict', 'xe_exec_balancer', 'xe_exec_basic', diff --git a/tests/xe/xe_eudebug.c b/tests/xe/xe_eudebug.c new file mode 100644 index 000000000..7202da689 --- /dev/null +++ b/tests/xe/xe_eudebug.c @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright © 2023 Intel Corporation + */ + +#include +#include "igt.h" + +static int __debug_connect(int fd, int *debugfd, struct drm_xe_eudebug_connect_param *param) +{ + int ret = 0; + + *debugfd = igt_ioctl(fd, DRM_IOCTL_XE_EUDEBUG_CONNECT, param); + + if (*debugfd < 0) { + ret = -errno; + igt_assume(ret != 0); + } + + errno = 0; + return ret; +} + +static void test_connect(int fd) +{ + struct drm_xe_eudebug_connect_param param = {}; + int debugfd, ret; + pid_t *pid; + + pid = mmap(NULL, sizeof(pid_t), PROT_WRITE, + MAP_SHARED | MAP_ANON, -1, 0); + + /* get fresh unrelated pid */ + igt_fork(child, 1) + *pid = getpid(); + + igt_waitchildren(); + param.pid = *pid; + munmap(pid, sizeof(pid_t)); + + ret = __debug_connect(fd, &debugfd, ¶m); + igt_assert(debugfd == -1); + igt_assert_eq(ret, param.pid ? -ENOENT : -EINVAL); + + param.pid = 0; + ret = __debug_connect(fd, &debugfd, ¶m); + igt_assert(debugfd == -1); + igt_assert_eq(ret, -EINVAL); + + igt_fork(child, 1) { + int newfd = drm_open_driver(DRIVER_XE); + + igt_drop_root(); + + param.pid = 1; + ret = __debug_connect(newfd, &debugfd, ¶m); + igt_assert(debugfd == -1); + igt_assert_eq(ret, -EACCES); + } + igt_waitchildren(); + + param.pid = getpid(); + param.version = -1; + ret = __debug_connect(fd, &debugfd, ¶m); + igt_assert(debugfd == -1); + igt_assert_eq(ret, -EINVAL); + + param.version = 0; + param.flags = ~0; + ret = __debug_connect(fd, &debugfd, ¶m); + igt_assert(debugfd == -1); + igt_assert_eq(ret, -EINVAL); + + param.flags = 0; + param.events = ~0; + ret = __debug_connect(fd, &debugfd, ¶m); + igt_assert(debugfd == -1); + igt_assert_eq(ret, -EINVAL); + + param.events = 0; + param.extensions = ~0; + ret = __debug_connect(fd, &debugfd, ¶m); + igt_assert(debugfd == -1); + igt_assert_eq(ret, -EINVAL); + + param.extensions = 0; + ret = __debug_connect(fd, &debugfd, ¶m); + igt_assert_neq(debugfd, -1); + igt_assert_eq(ret, 0); + + close(debugfd); +} + +static void test_close(int fd) +{ + struct drm_xe_eudebug_connect_param param = { 0, }; + int debug_fd1, debug_fd2; + int fd2; + + param.pid = getpid(); + + igt_assert_eq(__debug_connect(fd, &debug_fd1, ¶m), 0); + igt_assert(debug_fd1 >= 0); + igt_assert_eq(__debug_connect(fd, &debug_fd2, ¶m), -EBUSY); + igt_assert_eq(debug_fd2, -1); + + close(debug_fd1); + fd2 = drm_open_driver(DRIVER_XE); + + igt_assert_eq(__debug_connect(fd2, &debug_fd2, ¶m), 0); + igt_assert(debug_fd2 >= 0); + close(fd2); + close(debug_fd2); + close(debug_fd1); +} + +igt_main +{ + int fd; + + igt_fixture { + fd = drm_open_driver(DRIVER_XE); + } + + igt_subtest("basic-connect") + test_connect(fd); + + igt_subtest("basic-close") + test_close(fd); + + igt_fixture + close(fd); +} -- 2.34.1