[PATCH 13/26] drm/dp_mst: Swap the order of checking root vs. non-root port BW limitations
Lisovskiy, Stanislav
stanislav.lisovskiy at intel.com
Tue Oct 24 15:21:13 UTC 2023
On Fri, Sep 08, 2023 at 07:10:37PM +0300, Imre Deak wrote:
> drm_dp_mst_atomic_check_mgr() should check for BW limitation starting
> from sink ports continuing towards the root port, so that drivers can
> use the @failing_port returned to resolve a BW overallocation in an
> ideal way. For instance from streams A,B,C in a topology A,B going
> through @failing_port and C not going through it, a BW overallocation of
> A,B due to a limit of the port must be resolved first before considering
> the limits of other ports closer to the root port. This way can avoid
> reducing the BW of stream C unnecessarily due to a BW limit closer to the
> root port.
>
> Based on the above swap the order of the BW check for the root port and
> the check for all the ports downstream of it (the latter going through
> the topology already in the sink->root port direction).
Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy at intel.com>
>
> Cc: Lyude Paul <lyude at redhat.com>
> Cc: dri-devel at lists.freedesktop.org
> Signed-off-by: Imre Deak <imre.deak at intel.com>
> ---
> drivers/gpu/drm/display/drm_dp_mst_topology.c | 13 ++++++++-----
> 1 file changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> index 6b1cbe2260a29..e536ee1020741 100644
> --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
> +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> @@ -5448,9 +5448,13 @@ EXPORT_SYMBOL(drm_dp_mst_atomic_enable_dsc);
> * - %-ENOSPC, if the new state is invalid, because of BW limitation
> * @failing_port is set to:
> * - The non-root port where a BW limit check failed
> + * with all the ports downstream of @failing_port passing
> + * the BW limit check.
> * The returned port pointer is valid until at least
> * one payload downstream of it exists.
> * - %NULL if the BW limit check failed at the root port
> + * with all the ports downstream of the root port passing
> + * the BW limit check.
> * - %-EINVAL, if the new state is invalid, because the root port has
> * too many payloads.
> */
> @@ -5466,17 +5470,16 @@ int drm_dp_mst_atomic_check_mgr(struct drm_atomic_state *state,
> if (!mgr->mst_state)
> return 0;
>
> - ret = drm_dp_mst_atomic_check_payload_alloc_limits(mgr, mst_state);
> - if (ret)
> - return ret;
> -
> mutex_lock(&mgr->lock);
> ret = drm_dp_mst_atomic_check_mstb_bw_limit(mgr->mst_primary,
> mst_state,
> failing_port);
> mutex_unlock(&mgr->lock);
>
> - return ret < 0 ? ret : 0;
> + if (ret < 0)
> + return ret;
> +
> + return drm_dp_mst_atomic_check_payload_alloc_limits(mgr, mst_state);
> }
> EXPORT_SYMBOL(drm_dp_mst_atomic_check_mgr);
>
> --
> 2.37.2
>
More information about the Intel-gfx-trybot
mailing list