• Lyude Paul's avatar
    drm/dp_mst: Restart last_connected_port_and_mstb() if topology ref fails · 56d1c14e
    Lyude Paul authored
    While this isn't a complete fix, this will improve the reliability of
    drm_dp_get_last_connected_port_and_mstb() pretty significantly during
    hotplug events, since there's a chance that the in-memory topology tree
    may not be fully updated when drm_dp_get_last_connected_port_and_mstb()
    is called and thus might end up causing our search to fail on an mstb
    whose topology refcount has reached 0, but has not yet been removed from
    it's parent.
    
    Ideally, we should further fix this problem by ensuring that we deal
    with the potential for racing with a hotplug event, which would look
    like this:
    
    * drm_dp_payload_send_msg() retrieves the last living relative of mstb
      with drm_dp_get_last_connected_port_and_mstb()
    * drm_dp_payload_send_msg() starts building payload message
      At the same time, mstb gets unplugged from the topology and is no
      longer the actual last living relative of the original mstb
    * drm_dp_payload_send_msg() tries sending the payload message, hub times
      out
    * Hub timed out, we give up and run away-resulting in the payload being
      leaked
    
    This could be fixed by restarting the
    drm_dp_get_last_connected_port_and_mstb() search whenever we get a
    timeout, sending the payload to the new mstb, then repeating until
    either the entire topology is removed from the system or
    drm_dp_get_last_connected_port_and_mstb() fails. But since the above
    race condition is not terribly likely, we'll address that in a later
    patch series once we've improved the recovery handling for VCPI
    allocations in the rest of the DP MST helpers.
    
    Changes since v1:
    * Convert kerneldoc for drm_dp_get_last_connected_port_and_mstb to
      normal comment - danvet
    Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
    Reviewed-by: default avatarHarry Wentland <harry.wentland@amd.com>
    Reviewed-by: default avatarDaniel Vetter <daniel@ffwll.ch>
    Cc: David Airlie <airlied@redhat.com>
    Cc: Jerry Zuo <Jerry.Zuo@amd.com>
    Cc: Juston Li <juston.li@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190111005343.17443-8-lyude@redhat.com
    56d1c14e
drm_dp_mst_topology.c 104 KB