On 10/11/2025 9:38 PM, Michał Winiarski wrote:
> VF FLR requires additional processing done by PF driver.
> Add a helper to be used as part of VF driver .reset_done().

this ".reset_done" part might require some explanation/update

> 
> Signed-off-by: Michał Winiarski <[email protected]>
> ---
>  drivers/gpu/drm/xe/xe_sriov_pf_control.c | 24 ++++++++++++++++++++++++
>  drivers/gpu/drm/xe/xe_sriov_pf_control.h |  1 +
>  2 files changed, 25 insertions(+)
> 
> diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_control.c 
> b/drivers/gpu/drm/xe/xe_sriov_pf_control.c
> index 10e1f18aa8b11..24845644f269e 100644
> --- a/drivers/gpu/drm/xe/xe_sriov_pf_control.c
> +++ b/drivers/gpu/drm/xe/xe_sriov_pf_control.c
> @@ -122,6 +122,30 @@ int xe_sriov_pf_control_reset_vf(struct xe_device *xe, 
> unsigned int vfid)
>       return result;
>  }
>  
> +/**
> + * xe_sriov_pf_control_wait_flr() - Wait for a VF reset (FLR) to complete.
> + * @xe: the &xe_device
> + * @vfid: the VF identifier
> + *
> + * This function is for PF only.
> + *
> + * Return: 0 on success or a negative error code on failure.
> + */
> +int xe_sriov_pf_control_wait_flr(struct xe_device *xe, unsigned int vfid)
> +{
> +     struct xe_gt *gt;
> +     unsigned int id;
> +     int result = 0;
> +     int err;
> +
> +     for_each_gt(gt, xe, id) {
> +             err = xe_gt_sriov_pf_control_wait_flr(gt, vfid);
> +             result = result ? -EUCLEAN : err;
> +     }
> +
> +     return result;
> +}

one might want to call this new wait function from within 
xe_sriov_pf_control_reset_vf() which does both trigger/wait
but for me it works as is, so with commit message update

Reviewed-by: Michal Wajdeczko <[email protected]>

> +
>  /**
>   * xe_sriov_pf_control_sync_flr() - Synchronize a VF FLR between all GTs.
>   * @xe: the &xe_device
> diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_control.h 
> b/drivers/gpu/drm/xe/xe_sriov_pf_control.h
> index 512fd21d87c1e..c8ea54768cfaa 100644
> --- a/drivers/gpu/drm/xe/xe_sriov_pf_control.h
> +++ b/drivers/gpu/drm/xe/xe_sriov_pf_control.h
> @@ -12,6 +12,7 @@ int xe_sriov_pf_control_pause_vf(struct xe_device *xe, 
> unsigned int vfid);
>  int xe_sriov_pf_control_resume_vf(struct xe_device *xe, unsigned int vfid);
>  int xe_sriov_pf_control_stop_vf(struct xe_device *xe, unsigned int vfid);
>  int xe_sriov_pf_control_reset_vf(struct xe_device *xe, unsigned int vfid);
> +int xe_sriov_pf_control_wait_flr(struct xe_device *xe, unsigned int vfid);
>  int xe_sriov_pf_control_sync_flr(struct xe_device *xe, unsigned int vfid);
>  int xe_sriov_pf_control_save_vf(struct xe_device *xe, unsigned int vfid);
>  int xe_sriov_pf_control_wait_save_vf(struct xe_device *xe, unsigned int 
> vfid);

Reply via email to