On 9/4/2025 12:30 AM, Vivek Kasireddy wrote:
> To properly import a dmabuf that is associated with a VF (or that
> originates in a Guest VM that includes a VF), we need to know where
> in LMEM the VF's allocated regions exist. Therefore, introduce a
> new helper to return the object that backs the VF's regions in LMEM.
> 
> v2:
> - Make the helper return the LMEM object instead of the start address.
> 
> Signed-off-by: Vivek Kasireddy <[email protected]>
> ---
>  drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 23 ++++++++++++++++++++++
>  drivers/gpu/drm/xe/xe_gt_sriov_pf_config.h |  1 +
>  2 files changed, 24 insertions(+)
> 
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c 
> b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
> index c8f0320d032f..e01f5b340999 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
> @@ -1542,6 +1542,29 @@ u64 xe_gt_sriov_pf_config_get_lmem(struct xe_gt *gt, 
> unsigned int vfid)
>       return size;
>  }
>  
> +/**
> + * xe_gt_sriov_pf_config_get_lmem_obj - Get VF's LMEM BO.
> + * @gt: the &xe_gt
> + * @vfid: the VF identifier
> + *
> + * This function can only be called on PF.
> + *
> + * Return: BO that is backing VF's quota in LMEM.
> + */
> +struct xe_bo *xe_gt_sriov_pf_config_get_lmem_obj(struct xe_gt *gt,
> +                                              unsigned int vfid)
> +{
> +     struct xe_gt_sriov_config *config;
> +     struct xe_bo *lmem_obj;
> +
> +     mutex_lock(xe_gt_sriov_pf_master_mutex(gt));
> +     config = pf_pick_vf_config(gt, vfid);
> +     lmem_obj = config->lmem_obj;
> +     mutex_unlock(xe_gt_sriov_pf_master_mutex(gt));
> +
> +     return lmem_obj;

note that this bo pointer might be stale outside master-mutex
as now nothing prevents other code or user to unprovision VF

I guess you at least need to use xe_bo_get()/put()
and/or introduce some logic that would mark this BO as used

> +}
> +
>  /**
>   * xe_gt_sriov_pf_config_set_lmem - Provision VF with LMEM.
>   * @gt: the &xe_gt (can't be media)
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.h 
> b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.h
> index 513e6512a575..bef459003de1 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.h
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.h
> @@ -31,6 +31,7 @@ int xe_gt_sriov_pf_config_set_fair_dbs(struct xe_gt *gt, 
> unsigned int vfid, unsi
>  int xe_gt_sriov_pf_config_bulk_set_dbs(struct xe_gt *gt, unsigned int vfid, 
> unsigned int num_vfs,
>                                      u32 num_dbs);
>  
> +struct xe_bo *xe_gt_sriov_pf_config_get_lmem_obj(struct xe_gt *gt, unsigned 
> int vfid);

and please place this declaration as last one in "lmem" group

>  u64 xe_gt_sriov_pf_config_get_lmem(struct xe_gt *gt, unsigned int vfid);
>  int xe_gt_sriov_pf_config_set_lmem(struct xe_gt *gt, unsigned int vfid, u64 
> size);
>  int xe_gt_sriov_pf_config_set_fair_lmem(struct xe_gt *gt, unsigned int vfid, 
> unsigned int num_vfs);

Reply via email to