[PATCH 1/2] lib/igt_device_scan: Extract helper setting device filter from fd
Lukasz Laguna <[email protected]> Wed, 29 Jul 2026 12:09:17 +0200
| 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]> --- v3: - move it to igt_device_scan (Janusz) --- 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