Re: [PATCH 1/2] lib/igt_device_scan: Extract helper setting device filter from fd
"Bernatowicz, Marcin" <[email protected]> Tue, 4 Aug 2026 16:10:18 +0200
| Newsgroups | org.freedesktop.lists.igt-dev |
|---|---|
| Message-ID | <[email protected]> |
On 7/29/2026 12:09 PM, Lukasz Laguna wrote: > 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); > LGTM, Reviewed-by: Marcin Bernatowicz <[email protected]>