[PATCH i-g-t] tests/intel/xe_sriov_scheduling: Close open handles before disabling VFs
Marcin Bernatowicz
marcin.bernatowicz at linux.intel.com
Wed May 14 14:25:43 UTC 2025
Prevent a potential hot-unplug scenario by explicitly closing all
open handles before disabling VFs. Extract handle cleanup into a
dedicated subm_set_close_handles() helper and invoke it before
asserts.
Cc: Adam Miszczak <adam.miszczak at linux.intel.com>
Cc: Jakub Kolakowski <jakub1.kolakowski at intel.com>
Cc: Lukasz Laguna <lukasz.laguna at intel.com>
Signed-off-by: Marcin Bernatowicz <marcin.bernatowicz at linux.intel.com>
---
tests/intel/xe_sriov_scheduling.c | 31 ++++++++++++++++++++++++++-----
1 file changed, 26 insertions(+), 5 deletions(-)
diff --git a/tests/intel/xe_sriov_scheduling.c b/tests/intel/xe_sriov_scheduling.c
index 89cdd8750..2cd18c982 100644
--- a/tests/intel/xe_sriov_scheduling.c
+++ b/tests/intel/xe_sriov_scheduling.c
@@ -241,22 +241,41 @@ static void subm_set_init_sync_method(struct subm_set *set, enum subm_sync_metho
pthread_barrier_init(&set->barrier, NULL, set->ndata);
}
-static void subm_set_fini(struct subm_set *set)
+static void subm_set_close_handles(struct subm_set *set)
{
+ struct subm *s;
int i;
if (!set->ndata)
return;
for (i = 0; i < set->ndata; ++i) {
- igt_stats_fini(&set->data[i].stats.samples);
- subm_fini(&set->data[i].subm);
- drm_close_driver(set->data[i].subm.fd);
+ s = &set->data[i].subm;
+
+ if (s->fd != -1) {
+ subm_fini(s);
+ drm_close_driver(s->fd);
+ s->fd = -1;
+ }
}
- subm_set_free_data(set);
+}
+
+static void subm_set_fini(struct subm_set *set)
+{
+ int i;
+
+ if (!set->ndata)
+ return;
if (set->sync_method == SYNC_BARRIER)
pthread_barrier_destroy(&set->barrier);
+
+ subm_set_close_handles(set);
+
+ for (i = 0; i < set->ndata; ++i)
+ igt_stats_fini(&set->data[i].stats.samples);
+
+ subm_set_free_data(set);
}
struct init_vf_ids_opts {
@@ -602,6 +621,7 @@ static void throughput_ratio(int pf_fd, int num_vfs, const struct subm_opts *opt
/* dispatch spinners, wait for results */
subm_set_dispatch_and_wait_threads(set);
+ subm_set_close_handles(set);
/* verify results */
compute_common_time_frame_stats(set);
@@ -696,6 +716,7 @@ static void nonpreempt_engine_resets(int pf_fd, int num_vfs,
/* dispatch spinners, wait for results */
subm_set_dispatch_and_wait_threads(set);
+ subm_set_close_handles(set);
/* verify results */
for (int n = 0; n < set->ndata; ++n) {
--
2.31.1
More information about the igt-dev
mailing list