[PATCH v4 1/2] lib/igt_device_scan: Extract helper setting device filter from fd

Lukasz Laguna <[email protected]>
Newsgroups org.freedesktop.lists.igt-dev
Message-ID <[email protected]>
Helper sets device filter to the device corresponding to DRM device file
descriptor. Move the implementation from core_hotunplug test into the
library, so it can be reused in other tests.

Signed-off-by: Lukasz Laguna <[email protected]>
Reviewed-by: Marcin Bernatowicz <[email protected]>
---
 lib/igt_device_scan.c  | 23 +++++++++++++++++++++++
 lib/igt_device_scan.h  |  2 ++
 tests/core_hotunplug.c | 17 +----------------
 3 files changed, 26 insertions(+), 16 deletions(-)

diff --git a/lib/igt_device_scan.c b/lib/igt_device_scan.c
index 7c7995224..decf19646 100644
--- a/lib/igt_device_scan.c
+++ b/lib/igt_device_scan.c
@@ -2477,3 +2477,26 @@ int igt_device_prepare_filtered_view(const char *vendor)
 
 	return gpu_count;
 }
+
+/**
+ * igt_device_set_filter_from_fd:
+ * @fd: DRM device file descriptor
+ *
+ * Set device filter to the device corresponding to @fd.
+ */
+void igt_device_set_filter_from_fd(int fd)
+{
+	const char *filter_type = "sys:";
+	char filter[strlen(filter_type) + PATH_MAX + 1];
+	char *dst = stpcpy(filter, filter_type);
+	char path[PATH_MAX + 1];
+	struct stat st;
+
+	igt_assert(!fstat(fd, &st) && S_ISCHR(st.st_mode));
+	snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device",
+		 major(st.st_rdev), minor(st.st_rdev));
+	igt_assert(realpath(path, dst));
+
+	igt_device_filter_free_all();
+	igt_assert_eq(igt_device_filter_add(filter), 1);
+}
diff --git a/lib/igt_device_scan.h b/lib/igt_device_scan.h
index f24a193cd..ac75fea8c 100644
--- a/lib/igt_device_scan.h
+++ b/lib/igt_device_scan.h
@@ -103,4 +103,6 @@ int igt_open_render(struct igt_device_card *card);
 /* Add or use filters to match multiGPU devices */
 int igt_device_prepare_filtered_view(const char *vendor);
 
+void igt_device_set_filter_from_fd(int fd);
+
 #endif /* __IGT_DEVICE_SCAN_H__ */
diff --git a/tests/core_hotunplug.c b/tests/core_hotunplug.c
index 7c9dae1bf..33de65369 100644
--- a/tests/core_hotunplug.c
+++ b/tests/core_hotunplug.c
@@ -550,21 +550,6 @@ static void post_healthcheck(struct hotunplug *priv)
 	cleanup(priv);
 }
 
-static void set_filter_from_device(int fd)
-{
-	const char *filter_type = "sys:";
-	char filter[strlen(filter_type) + PATH_MAX + 1];
-	char *dst = stpcpy(filter, filter_type);
-	char path[PATH_MAX + 1];
-
-	igt_assert(igt_sysfs_path(fd, path, PATH_MAX));
-	igt_ignore_warn(strncat(path, "/device", PATH_MAX - strlen(path)));
-	igt_assert(realpath(path, dst));
-
-	igt_device_filter_free_all();
-	igt_assert_eq(igt_device_filter_add(filter), 1);
-}
-
 /* Subtests */
 
 static void unbind_rebind(struct hotunplug *priv)
@@ -713,7 +698,7 @@ int igt_main()
 		}
 
 		/* Make sure subtests always reopen the same device */
-		set_filter_from_device(fd_drm);
+		igt_device_set_filter_from_fd(fd_drm);
 
 		igt_assert_eq(close_device(fd_drm, "", "selected "), -1);
 
-- 
2.43.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.