[PATCH v5] amd/display: only require overlay plane to cover whole CRTC on ChromeOS

Alex Deucher alexdeucher at gmail.com
Tue Oct 12 19:57:25 UTC 2021


On Tue, Oct 12, 2021 at 10:39 AM Harry Wentland <harry.wentland at amd.com> wrote:
>
> On 2021-10-11 11:16, Simon Ser wrote:
> > Commit ddab8bd788f5 ("drm/amd/display: Fix two cursor duplication when
> > using overlay") changed the atomic validation code to forbid the
> > overlay plane from being used if it doesn't cover the whole CRTC. The
> > motivation is that ChromeOS uses the atomic API for everything except
> > the cursor plane (which uses the legacy API). Thus amdgpu must always
> > be prepared to enable/disable/move the cursor plane at any time without
> > failing (or else ChromeOS will trip over).
> >
> > As discussed in [1], there's no reason why the ChromeOS limitation
> > should prevent other fully atomic users from taking advantage of the
> > overlay plane. Let's limit the check to ChromeOS.
> >
> > v4: fix ChromeOS detection (Harry)
> >
> > v5: fix conflict with linux-next
> >
> > [1]: https://lore.kernel.org/amd-gfx/JIQ_93_cHcshiIDsrMU1huBzx9P9LVQxucx8hQArpQu7Wk5DrCl_vTXj_Q20m_L-8C8A5dSpNcSJ8ehfcCrsQpfB5QG_Spn14EYkH9chtg0=@emersion.fr/>>
> > Signed-off-by: Simon Ser <contact at emersion.fr>
> > Cc: Alex Deucher <alexander.deucher at amd.com>
> > Cc: Harry Wentland <hwentlan at amd.com>
> > Cc: Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>
> > Cc: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
> > Cc: Rodrigo Siqueira <Rodrigo.Siqueira at amd.com>
> > Cc: Sean Paul <seanpaul at chromium.org>
> > Fixes: ddab8bd788f5 ("drm/amd/display: Fix two cursor duplication when using overlay")
>
> Reviewed-by: Harry Wentland <harry.wentland at amd.com>

@Harry Wentland, @Simon Ser Do you have a preference on whether we
apply this patch or revert ddab8bd788f5?  I'm fine with either.

Alex

>
> Harry
>
> > ---
> >  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 29 +++++++++++++++++++
> >  1 file changed, 29 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> > index f35561b5a465..2eeda1fec506 100644
> > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> > @@ -10594,6 +10594,31 @@ static int add_affected_mst_dsc_crtcs(struct drm_atomic_state *state, struct drm
> >  }
> >  #endif
> >
> > +static bool is_chromeos(void)
> > +{
> > +     struct mm_struct *mm = current->mm;
> > +     struct file *exe_file;
> > +     bool ret;
> > +
> > +     /* ChromeOS renames its thread to DrmThread. Also check the executable
> > +      * name. */
> > +     if (strcmp(current->comm, "DrmThread") != 0 || !mm)
> > +             return false;
> > +
> > +     rcu_read_lock();
> > +     exe_file = rcu_dereference(mm->exe_file);
> > +     if (exe_file && !get_file_rcu(exe_file))
> > +             exe_file = NULL;
> > +     rcu_read_unlock();
> > +
> > +     if (!exe_file)
> > +             return false;
> > +     ret = strcmp(exe_file->f_path.dentry->d_name.name, "chrome") == 0;
> > +     fput(exe_file);
> > +
> > +     return ret;
> > +}
> > +
> >  static int validate_overlay(struct drm_atomic_state *state)
> >  {
> >       int i;
> > @@ -10601,6 +10626,10 @@ static int validate_overlay(struct drm_atomic_state *state)
> >       struct drm_plane_state *new_plane_state;
> >       struct drm_plane_state *primary_state, *overlay_state = NULL;
> >
> > +     /* This is a workaround for ChromeOS only */
> > +     if (!is_chromeos())
> > +             return 0;
> > +
> >       /* Check if primary plane is contained inside overlay */
> >       for_each_new_plane_in_state_reverse(state, plane, new_plane_state, i) {
> >               if (plane->type == DRM_PLANE_TYPE_OVERLAY) {
> >
>


More information about the amd-gfx mailing list