mbox series

[v4,00/16] MST refcounting/atomic helpers cleanup

Message ID 20190105001506.30181-1-lyude@redhat.com (mailing list archive)
Headers show
Series MST refcounting/atomic helpers cleanup | expand

Message

Lyude Paul Jan. 5, 2019, 12:14 a.m. UTC
This is the series I've been working on for a while now to get all of
the atomic DRM drivers in the tree to use the atomic MST helpers, and to
make the atomic MST helpers actually idempotent. Turns out it's a lot
more difficult to do that without also fixing how port and branch device
refcounting works so that it actually makes sense, since the current
upstream implementation requires a ton of magic in the atomic helpers to
work around properly and in many situations just plain doesn't work as
intended.

There's still more cleanup that can be done, but I think this is a good
place to start off for now :).

This version just contains some changes that I forgot to make that had
been requested much earlier, mainly in regards to the atomic checking
code I added to i915 and nouveau (but not the helpers).

Also, per-request I've made a gitlab branch available for this:

https://gitlab.freedesktop.org/lyudess/linux/commits/wip/mst-dual-kref-start-v4

Lyude Paul (16):
  drm/dp_mst: Rename drm_dp_mst_get_validated_(port|mstb)_ref and
    friends
  drm/dp_mst: Introduce new refcounting scheme for mstbs and ports
  drm/dp_mst: Restart last_connected_port_and_mstb() if topology ref
    fails
  drm/dp_mst: Stop releasing VCPI when removing ports from topology
  drm/dp_mst: Fix payload deallocation on hotplugs using malloc refs
  drm/i915: Keep malloc references to MST ports
  drm/amdgpu/display: Keep malloc ref to MST port
  drm/nouveau: Remove bogus cleanup in nv50_mstm_add_connector()
  drm/nouveau: Remove unnecessary VCPI checks in nv50_msto_cleanup()
  drm/nouveau: Keep malloc references to MST ports
  drm/nouveau: Stop unsetting mstc->port, use malloc refs
  drm/nouveau: Grab payload lock in nv50_msto_payload()
  drm/dp_mst: Add some atomic state iterator macros
  drm/dp_mst: Start tracking per-port VCPI allocations
  drm/dp_mst: Check payload count in drm_dp_mst_atomic_check()
  drm/nouveau: Use atomic VCPI helpers for MST

 .../gpu/dp-mst/topology-figure-1.dot          |  52 +
 .../gpu/dp-mst/topology-figure-2.dot          |  56 ++
 .../gpu/dp-mst/topology-figure-3.dot          |  59 ++
 Documentation/gpu/drm-kms-helpers.rst         |  26 +-
 .../display/amdgpu_dm/amdgpu_dm_mst_types.c   |  11 +-
 drivers/gpu/drm/drm_dp_mst_topology.c         | 938 ++++++++++++++----
 drivers/gpu/drm/i915/intel_connector.c        |   4 +
 drivers/gpu/drm/i915/intel_display.c          |   4 +
 drivers/gpu/drm/i915/intel_dp_mst.c           |  55 +-
 drivers/gpu/drm/nouveau/dispnv50/disp.c       |  96 +-
 include/drm/drm_dp_mst_helper.h               | 151 ++-
 11 files changed, 1203 insertions(+), 249 deletions(-)
 create mode 100644 Documentation/gpu/dp-mst/topology-figure-1.dot
 create mode 100644 Documentation/gpu/dp-mst/topology-figure-2.dot
 create mode 100644 Documentation/gpu/dp-mst/topology-figure-3.dot

Comments

Harry Wentland Jan. 8, 2019, 7:57 p.m. UTC | #1
On 2019-01-04 7:14 p.m., Lyude Paul wrote:
> This is the series I've been working on for a while now to get all of
> the atomic DRM drivers in the tree to use the atomic MST helpers, and to
> make the atomic MST helpers actually idempotent. Turns out it's a lot
> more difficult to do that without also fixing how port and branch device
> refcounting works so that it actually makes sense, since the current
> upstream implementation requires a ton of magic in the atomic helpers to
> work around properly and in many situations just plain doesn't work as
> intended.
> 
> There's still more cleanup that can be done, but I think this is a good
> place to start off for now :).
> 
> This version just contains some changes that I forgot to make that had
> been requested much earlier, mainly in regards to the atomic checking
> code I added to i915 and nouveau (but not the helpers).
> 
> Also, per-request I've made a gitlab branch available for this:
> 
> https://gitlab.freedesktop.org/lyudess/linux/commits/wip/mst-dual-kref-start-v4
> 
> Lyude Paul (16):
>   drm/dp_mst: Rename drm_dp_mst_get_validated_(port|mstb)_ref and
>     friends
>   drm/dp_mst: Introduce new refcounting scheme for mstbs and ports
>   drm/dp_mst: Restart last_connected_port_and_mstb() if topology ref
>     fails
>   drm/dp_mst: Stop releasing VCPI when removing ports from topology
>   drm/dp_mst: Fix payload deallocation on hotplugs using malloc refs
>   drm/i915: Keep malloc references to MST ports
>   drm/amdgpu/display: Keep malloc ref to MST port
>   drm/nouveau: Remove bogus cleanup in nv50_mstm_add_connector()
>   drm/nouveau: Remove unnecessary VCPI checks in nv50_msto_cleanup()
>   drm/nouveau: Keep malloc references to MST ports
>   drm/nouveau: Stop unsetting mstc->port, use malloc refs
>   drm/nouveau: Grab payload lock in nv50_msto_payload()
>   drm/dp_mst: Add some atomic state iterator macros
>   drm/dp_mst: Start tracking per-port VCPI allocations
>   drm/dp_mst: Check payload count in drm_dp_mst_atomic_check()
>   drm/nouveau: Use atomic VCPI helpers for MST
> 

Somehow I left my RB on v2 for a while. Either way patches 2-5, and 7 are
Reviewed-by: Harry Wentland <harry.wentland@amd.com>

Haven't had a chance to take a look at 13-15 but noticed the "Changes since v" mention versions that either aren't on the mailing list or don't line up with the patch versioning.

Harry 

>  .../gpu/dp-mst/topology-figure-1.dot          |  52 +
>  .../gpu/dp-mst/topology-figure-2.dot          |  56 ++
>  .../gpu/dp-mst/topology-figure-3.dot          |  59 ++
>  Documentation/gpu/drm-kms-helpers.rst         |  26 +-
>  .../display/amdgpu_dm/amdgpu_dm_mst_types.c   |  11 +-
>  drivers/gpu/drm/drm_dp_mst_topology.c         | 938 ++++++++++++++----
>  drivers/gpu/drm/i915/intel_connector.c        |   4 +
>  drivers/gpu/drm/i915/intel_display.c          |   4 +
>  drivers/gpu/drm/i915/intel_dp_mst.c           |  55 +-
>  drivers/gpu/drm/nouveau/dispnv50/disp.c       |  96 +-
>  include/drm/drm_dp_mst_helper.h               | 151 ++-
>  11 files changed, 1203 insertions(+), 249 deletions(-)
>  create mode 100644 Documentation/gpu/dp-mst/topology-figure-1.dot
>  create mode 100644 Documentation/gpu/dp-mst/topology-figure-2.dot
>  create mode 100644 Documentation/gpu/dp-mst/topology-figure-3.dot
>
Lyude Paul Jan. 8, 2019, 9:04 p.m. UTC | #2
On Tue, 2019-01-08 at 19:57 +0000, Wentland, Harry wrote:
> On 2019-01-04 7:14 p.m., Lyude Paul wrote:
> > This is the series I've been working on for a while now to get all of
> > the atomic DRM drivers in the tree to use the atomic MST helpers, and to
> > make the atomic MST helpers actually idempotent. Turns out it's a lot
> > more difficult to do that without also fixing how port and branch device
> > refcounting works so that it actually makes sense, since the current
> > upstream implementation requires a ton of magic in the atomic helpers to
> > work around properly and in many situations just plain doesn't work as
> > intended.
> > 
> > There's still more cleanup that can be done, but I think this is a good
> > place to start off for now :).
> > 
> > This version just contains some changes that I forgot to make that had
> > been requested much earlier, mainly in regards to the atomic checking
> > code I added to i915 and nouveau (but not the helpers).
> > 
> > Also, per-request I've made a gitlab branch available for this:
> > 
> > https://gitlab.freedesktop.org/lyudess/linux/commits/wip/mst-dual-kref-start-v4
> > 
> > Lyude Paul (16):
> >   drm/dp_mst: Rename drm_dp_mst_get_validated_(port|mstb)_ref and
> >     friends
> >   drm/dp_mst: Introduce new refcounting scheme for mstbs and ports
> >   drm/dp_mst: Restart last_connected_port_and_mstb() if topology ref
> >     fails
> >   drm/dp_mst: Stop releasing VCPI when removing ports from topology
> >   drm/dp_mst: Fix payload deallocation on hotplugs using malloc refs
> >   drm/i915: Keep malloc references to MST ports
> >   drm/amdgpu/display: Keep malloc ref to MST port
> >   drm/nouveau: Remove bogus cleanup in nv50_mstm_add_connector()
> >   drm/nouveau: Remove unnecessary VCPI checks in nv50_msto_cleanup()
> >   drm/nouveau: Keep malloc references to MST ports
> >   drm/nouveau: Stop unsetting mstc->port, use malloc refs
> >   drm/nouveau: Grab payload lock in nv50_msto_payload()
> >   drm/dp_mst: Add some atomic state iterator macros
> >   drm/dp_mst: Start tracking per-port VCPI allocations
> >   drm/dp_mst: Check payload count in drm_dp_mst_atomic_check()
> >   drm/nouveau: Use atomic VCPI helpers for MST
> > 
> 
> Somehow I left my RB on v2 for a while. Either way patches 2-5, and 7 are
> Reviewed-by: Harry Wentland <harry.wentland@amd.com>
> 
> Haven't had a chance to take a look at 13-15 but noticed the "Changes since
> v" mention versions that either aren't on the mailing list or don't line up
> with the patch versioning.
That's intentional! Those were patches that were part of a different series
that got replaced by this one, so the older versions are from the previous
series
> 
> Harry 
> 
> >  .../gpu/dp-mst/topology-figure-1.dot          |  52 +
> >  .../gpu/dp-mst/topology-figure-2.dot          |  56 ++
> >  .../gpu/dp-mst/topology-figure-3.dot          |  59 ++
> >  Documentation/gpu/drm-kms-helpers.rst         |  26 +-
> >  .../display/amdgpu_dm/amdgpu_dm_mst_types.c   |  11 +-
> >  drivers/gpu/drm/drm_dp_mst_topology.c         | 938 ++++++++++++++----
> >  drivers/gpu/drm/i915/intel_connector.c        |   4 +
> >  drivers/gpu/drm/i915/intel_display.c          |   4 +
> >  drivers/gpu/drm/i915/intel_dp_mst.c           |  55 +-
> >  drivers/gpu/drm/nouveau/dispnv50/disp.c       |  96 +-
> >  include/drm/drm_dp_mst_helper.h               | 151 ++-
> >  11 files changed, 1203 insertions(+), 249 deletions(-)
> >  create mode 100644 Documentation/gpu/dp-mst/topology-figure-1.dot
> >  create mode 100644 Documentation/gpu/dp-mst/topology-figure-2.dot
> >  create mode 100644 Documentation/gpu/dp-mst/topology-figure-3.dot
> >