On Mon, 2025-09-15 at 00:21 -0700, 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 > > v3: > - Move the declaration of the helper under other lmem helpers > (Michal)
In XeKMD we're typically using VRAM instead of LMEM, IMO we should try to be consistent with this. > > Signed-off-by: Vivek Kasireddy <vivek.kasire...@intel.com> > --- > 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 6344b5205c08..1bfcd35cc8ef 100644 > --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c > +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c > @@ -1535,6 +1535,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; Bump the reference count? I think Matt mentioned this as well? > + mutex_unlock(xe_gt_sriov_pf_master_mutex(gt)); > + > + return lmem_obj; > +} > + > /** > * 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..bbc5c238cbf6 100644 > --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.h > +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.h > @@ -36,6 +36,7 @@ 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); > int xe_gt_sriov_pf_config_bulk_set_lmem(struct xe_gt *gt, unsigned > int vfid, unsigned int num_vfs, > u64 size); > +struct xe_bo *xe_gt_sriov_pf_config_get_lmem_obj(struct xe_gt *gt, > unsigned int vfid); > > u32 xe_gt_sriov_pf_config_get_exec_quantum(struct xe_gt *gt, > unsigned int vfid); > int xe_gt_sriov_pf_config_set_exec_quantum(struct xe_gt *gt, > unsigned int vfid, u32 exec_quantum);