[Intel-xe] [PATCH] drm/xe: Allow scanout of bos that can be migrated to lmem
Rodrigo Vivi
rodrigo.vivi at kernel.org
Thu May 18 17:55:13 UTC 2023
On Thu, May 18, 2023 at 05:28:43PM +0000, Souza, Jose wrote:
> On Thu, 2023-05-18 at 13:21 -0400, Rodrigo Vivi wrote:
> > On Wed, May 17, 2023 at 09:29:18AM -0700, José Roberto de Souza wrote:
> >
> > The patch itself looks good, but I believe that I might be confused
> > by the commit message. so a few questions here:
> >
> > > OpenGL stack makes scanout buffers exported as well because usually
> > > it will be exported from client application to compositor.
> > >
> > > Exported buffers needs to be placed in SMEM so it can be accessed
> > > by different GPUs if needed,
> >
> > so, if it needs SMEM, why are you migrating to LMEM?
>
> Display can only scanout from lmem or prime imported buffers.
>
> >
> > > so in discrete GPUs it is placed in
> > > SMEM+LMEM.
> >
> > I see the code migrating to LMEM, but not migrating LMEM to SMEM,
> > what am I missing?
>
> Don't know this one but probably when accessing the prime buffer somewhere in Xe code the buffer data is migrated from lmem to smem.
Indeed, at xe_dma_buf_pin()
>
> >
> > >
> > > But this combination is causing aplications like kmscube to be able
> > > to create framebuffers.
> >
> > to be able or to *not* be able? what's the real current issue?
>
> ops will add the missing "not", here.
> The real issue is that some compositors can't create framebuffers so it fails to initialize leaving user in cli.
with the not, already add
Reviewed-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
>
> >
> > >
> > > So here doing the same handling as i915 and allowing bos that can
> > > migrate to lmem0/vram0 to be promoted to framebuffer.
> >
> > okay, this phrase is why I believe the commit is doing what it should,
> > but the above messages confused me a bit....
> >
> > >
> > > At least all current discrete GPUs with display only have one lmem
> > > region, so we don't need to check for vram1 but we might need to
> > > extend it in future.
> >
> > ack on this part.
> >
> > >
> > > Signed-off-by: José Roberto de Souza <jose.souza at intel.com>
> > > Signed-off-by: Matthew Auld <matthew.auld at intel.com>
> > > ---
> > > drivers/gpu/drm/i915/display/intel_fb.c | 5 +++--
> > > drivers/gpu/drm/xe/display/xe_fb_pin.c | 7 ++++++-
> > > 2 files changed, 9 insertions(+), 3 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
> > > index 015aacbad1b11..feb8a0f5fbdf6 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_fb.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_fb.c
> > > @@ -2121,8 +2121,9 @@ intel_user_framebuffer_create(struct drm_device *dev,
> > > return ERR_PTR(-ENOENT);
> > >
> > > obj = gem_to_xe_bo(gem);
> > > - /* Require vram exclusive objects, but allow dma-buf imports */
> > > - if (IS_DGFX(i915) && obj->flags & XE_BO_CREATE_SYSTEM_BIT &&
> > > + /* Require vram placement or dma-buf import */
> > > + if (IS_DGFX(i915) &&
> > > + !xe_bo_can_migrate(gem_to_xe_bo(gem), XE_PL_VRAM0) &&
> > > obj->ttm.type != ttm_bo_type_sg) {
> > > drm_gem_object_put(gem);
> > > return ERR_PTR(-EREMOTE);
> > > diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
> > > index ed691d28b34d7..c7c4df18e439b 100644
> > > --- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
> > > +++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
> > > @@ -183,6 +183,8 @@ static int __xe_pin_fb_vma_ggtt(struct intel_framebuffer *fb,
> > > static struct i915_vma *__xe_pin_fb_vma(struct intel_framebuffer *fb,
> > > const struct i915_gtt_view *view)
> > > {
> > > + struct drm_device *dev = fb->base.dev;
> > > + struct xe_device *xe = to_xe_device(dev);
> > > struct i915_vma *vma = kzalloc(sizeof(*vma), GFP_KERNEL);
> > > struct xe_bo *bo = intel_fb_obj(&fb->base);
> > > int ret;
> > > @@ -204,7 +206,10 @@ static struct i915_vma *__xe_pin_fb_vma(struct intel_framebuffer *fb,
> > > if (ret)
> > > goto err;
> > >
> > > - ret = xe_bo_validate(bo, NULL, true);
> > > + if (IS_DGFX(xe))
> > > + ret = xe_bo_migrate(bo, XE_PL_VRAM0);
> > > + else
> > > + ret = xe_bo_validate(bo, NULL, true);
> > > if (!ret)
> > > ttm_bo_pin(&bo->ttm);
> > > ttm_bo_unreserve(&bo->ttm);
> > > --
> > > 2.40.1
> > >
>
More information about the Intel-xe
mailing list