On Wed, Feb 25, 2026 at 11:40:54AM +0200, Jani Nikula wrote:
> On Wed, 18 Feb 2026, Ville Syrjala <[email protected]> wrote:
> > From: Ville Syrjälä <[email protected]>
> >
> > Extract the BO lookup and tiling check into a new
> > helper called i915_overlay_obj_lookup(). This will have to
> > move to the i915 side of the parent vs. display driver split.
> >
> > There is a slight change here in that we now do the tiling
> > check before taking the modeset locks, but those locks don't
> > protect the BO tiling stuff in any way, so nothing is really
> > different here.
> >
> > Note that the hardware should support X-tiled scanout also
> > for the overlay, but I guess no one ever bothered to hook
> > it up and test it. So the check should stay at least for now.
> >
> > Signed-off-by: Ville Syrjälä <[email protected]>
> > ---
> > drivers/gpu/drm/i915/display/intel_overlay.c | 31 ++++++++++++++------
> > 1 file changed, 22 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c
> > b/drivers/gpu/drm/i915/display/intel_overlay.c
> > index e1707a678acb..5c4f8bf8ac44 100644
> > --- a/drivers/gpu/drm/i915/display/intel_overlay.c
> > +++ b/drivers/gpu/drm/i915/display/intel_overlay.c
> > @@ -1125,6 +1125,26 @@ static int check_overlay_src(struct intel_display
> > *display,
> > return 0;
> > }
> >
> > +static struct drm_i915_gem_object *
> > +i915_overlay_obj_lookup(struct drm_device *drm,
> > + struct drm_file *file_priv,
> > + u32 handle)
> > +{
> > + struct drm_i915_gem_object *bo;
> > +
> > + bo = i915_gem_object_lookup(file_priv, handle);
> > + if (!bo)
> > + return ERR_PTR(-ENOENT);
> > +
> > + if (i915_gem_object_is_tiled(bo)) {
> > + drm_dbg(drm, "buffer used for overlay image can not be
> > tiled\n");
> > + i915_gem_object_put(bo);
> > + return ERR_PTR(-EINVAL);
> > + }
> > +
> > + return bo;
> > +}
> > +
> > int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
> > struct drm_file *file_priv)
> > {
> > @@ -1155,19 +1175,12 @@ int intel_overlay_put_image_ioctl(struct drm_device
> > *dev, void *data,
> > return -ENOENT;
> > crtc = to_intel_crtc(drmmode_crtc);
> >
> > - new_bo = i915_gem_object_lookup(file_priv, params->bo_handle);
> > + new_bo = i915_overlay_obj_lookup(dev, file_priv, params->bo_handle);
> > if (!new_bo)
>
> i915_overlay_obj_lookup() returns error pointers.
Ack. Good catch.
>
> > - return -ENOENT;
> > + return PTR_ERR(new_bo);
> >
> > drm_modeset_lock_all(dev);
> >
> > - if (i915_gem_object_is_tiled(new_bo)) {
> > - drm_dbg_kms(display->drm,
> > - "buffer used for overlay image can not be tiled\n");
> > - ret = -EINVAL;
> > - goto out_unlock;
> > - }
> > -
> > ret = intel_overlay_recover_from_interrupt(overlay);
> > if (ret != 0)
> > goto out_unlock;
>
> --
> Jani Nikula, Intel
--
Ville Syrjälä
Intel