[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