drm/dp_mst: Remove port validation in drm_dp_atomic_find_vcpi_slots()
authorLyude Paul <lyude@redhat.com>
Sat, 2 Feb 2019 00:20:02 +0000 (19:20 -0500)
committerLyude Paul <lyude@redhat.com>
Tue, 5 Feb 2019 23:09:00 +0000 (18:09 -0500)
Since we now have an easy way of refcounting drm_dp_mst_port structs and
safely accessing their contents, there isn't any good reason to keep
validating ports here. It doesn't prevent us from performing modesets on
branch devices that have been removed either, and we already disallow
enabling new displays on unregistered connectors in
update_connector_routing() in drm_atomic_check_modeset(). All it does is
cause us to have to make weird special exceptions in our atomic
modesetting code. So, get rid of it entirely.

Signed-off-by: Lyude Paul <lyude@redhat.com>
Fixes: eceae1472467 ("drm/dp_mst: Start tracking per-port VCPI allocations")
Reviewed-by: Daniel Vetter <daniel@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20190202002023.29665-3-lyude@redhat.com
drivers/gpu/drm/drm_dp_mst_topology.c
drivers/gpu/drm/i915/intel_dp_mst.c
drivers/gpu/drm/nouveau/dispnv50/disp.c

index db0fdc513b9c7ce813d3f07f5737b4f1f68c4417..dc7ac0c60547863d89eafb89d9e7425314772ae4 100644 (file)
@@ -3117,10 +3117,6 @@ int drm_dp_atomic_find_vcpi_slots(struct drm_atomic_state *state,
        if (IS_ERR(topology_state))
                return PTR_ERR(topology_state);
 
-       port = drm_dp_mst_topology_get_port_validated(mgr, port);
-       if (port == NULL)
-               return -EINVAL;
-
        /* Find the current allocation for this port, if any */
        list_for_each_entry(pos, &topology_state->vcpis, next) {
                if (pos->port == port) {
@@ -3153,10 +3149,8 @@ int drm_dp_atomic_find_vcpi_slots(struct drm_atomic_state *state,
        /* Add the new allocation to the state */
        if (!vcpi) {
                vcpi = kzalloc(sizeof(*vcpi), GFP_KERNEL);
-               if (!vcpi) {
-                       ret = -ENOMEM;
-                       goto out;
-               }
+               if (!vcpi)
+                       return -ENOMEM;
 
                drm_dp_mst_get_port_malloc(port);
                vcpi->port = port;
@@ -3165,8 +3159,6 @@ int drm_dp_atomic_find_vcpi_slots(struct drm_atomic_state *state,
        vcpi->vcpi = req_slots;
 
        ret = req_slots;
-out:
-       drm_dp_mst_topology_put_port(port);
        return ret;
 }
 EXPORT_SYMBOL(drm_dp_atomic_find_vcpi_slots);
index b61e291367b439aed63012bf034b409f7b790fb3..5d8471f080d9051ac5d777a564d15351e175819a 100644 (file)
@@ -80,17 +80,12 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
        mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp);
        pipe_config->pbn = mst_pbn;
 
-       /* Zombie connectors can't have VCPI slots */
-       if (!drm_connector_is_unregistered(connector)) {
-               slots = drm_dp_atomic_find_vcpi_slots(state,
-                                                     &intel_dp->mst_mgr,
-                                                     port,
-                                                     mst_pbn);
-               if (slots < 0) {
-                       DRM_DEBUG_KMS("failed finding vcpi slots:%d\n",
-                                     slots);
-                       return slots;
-               }
+       slots = drm_dp_atomic_find_vcpi_slots(state, &intel_dp->mst_mgr, port,
+                                             mst_pbn);
+       if (slots < 0) {
+               DRM_DEBUG_KMS("failed finding vcpi slots:%d\n",
+                             slots);
+               return slots;
        }
 
        intel_link_compute_m_n(bpp, lane_count,
index 2e8a5fd9b26278ad3f2ac0b1523bedb505c80d30..60d858c2f2ce433845b67a0876b45ebd7132876d 100644 (file)
@@ -771,8 +771,7 @@ nv50_msto_atomic_check(struct drm_encoder *encoder,
        mstc->pbn = drm_dp_calc_pbn_mode(crtc_state->adjusted_mode.clock,
                                         bpp);
 
-       if (drm_atomic_crtc_needs_modeset(crtc_state) &&
-           !drm_connector_is_unregistered(connector)) {
+       if (drm_atomic_crtc_needs_modeset(crtc_state)) {
                slots = drm_dp_atomic_find_vcpi_slots(state, &mstm->mgr,
                                                      mstc->port, mstc->pbn);
                if (slots < 0)