[PATCH i-g-t] tests/intel/xe_sriov_scheduling: Close open handles before disabling VFs

Adam Miszczak adam.miszczak at linux.intel.com
Thu May 15 08:52:43 UTC 2025


On 5/14/2025 4:25 PM, Marcin Bernatowicz wrote:
> 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);
>   

LGTM,
Reviewed-by: Adam Miszczak <adam.miszczak at linux.intel.com>
>   	/* verify results */
>   	for (int n = 0; n < set->ndata; ++n) {


More information about the igt-dev mailing list