Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp39903imm; Tue, 18 Sep 2018 16:07:49 -0700 (PDT) X-Google-Smtp-Source: ANB0VdbHcpxbfZypDH8V9z9eWFMncvLNu0eF+yBjtuLrrnpLPTM0Qo0gGS7mWXgyDBJLalVHqbgi X-Received: by 2002:a63:5419:: with SMTP id i25-v6mr29557838pgb.345.1537312069191; Tue, 18 Sep 2018 16:07:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537312069; cv=none; d=google.com; s=arc-20160816; b=zw0xrGAGng5HJjvLtt4dbE9JPtTKnD+JVK1sRBo6iYUnM98R+AriAxaF3MWg5x1xsr kgWKqP+G/5ZeRUy5Q+9GXWPGd41g8u7FR9/alWMfnrZMlYsSB0sB/0kU2STKUrTLnGiI QXfVWeVZ5BiQGLXFlTFe3Hu7UWgsOMf29FPx/qnW4GUp83KaDxv80SljUpYSxpRmMUpv Vp4O31cXKZWykB9VoVJxopDrelpb2J1Nb5pq2FfxIviju4zMAxcHHCP2bnrNynYxxakg BOV2Fr5WFK7ygT0FfAV4ZrHpWAVyQMQIeI9unz0fgvvmWQT2UuXHl5kO086luWkQsB4T WB3Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=MdngsNUOKqLVd3y5300RdYq7tS1rxDbTZ68L4tKLmMw=; b=xXGnqoWAJss7zil4s1EkKIIspqO+LXxKaas4ZxggQOYhrr2fdKiOxJKG95ayLULGIa pLXgS4flSXMKjTZUjsYxhmwTO6pOV1qClqS/5tgUvDyWkEkPZBi99OzqlpGKaDCDulAK 7Hwr1NRQyi1hjFlaPdywLWyi7rFhV/N0I8i03stsrI20b+0/9ylSobS0n5575et/C1iZ PcOeFcHYdDfBFzza9f6fKRsUqzSTJ4jbY2u4WpXbTZlT6NGY+hjMPS47/F5cr58djEve 0UdWK6qJub3El4AttgBRuCpI9EcilQ5XpFnIsyIP0Sejeu8jktGcAIr0106RMqV0mg/L OMug== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f16-v6si20465113pgf.474.2018.09.18.16.07.30; Tue, 18 Sep 2018 16:07:49 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730473AbeISEmH (ORCPT + 99 others); Wed, 19 Sep 2018 00:42:07 -0400 Received: from mx1.redhat.com ([209.132.183.28]:57478 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725873AbeISEmG (ORCPT ); Wed, 19 Sep 2018 00:42:06 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2E2A33002A92; Tue, 18 Sep 2018 23:07:16 +0000 (UTC) Received: from whitewolf.lyude.net.com (ovpn-125-172.rdu2.redhat.com [10.10.125.172]) by smtp.corp.redhat.com (Postfix) with ESMTP id F367E7A435; Tue, 18 Sep 2018 23:07:13 +0000 (UTC) From: Lyude Paul To: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Cc: stable@vger.kernel.org, Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , David Airlie , linux-kernel@vger.kernel.org Subject: [PATCH 5/6] drm/i915: Fix intel_dp_mst_best_encoder() Date: Tue, 18 Sep 2018 19:06:21 -0400 Message-Id: <20180918230637.20700-6-lyude@redhat.com> In-Reply-To: <20180918230637.20700-1-lyude@redhat.com> References: <20180918230637.20700-1-lyude@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.47]); Tue, 18 Sep 2018 23:07:16 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently, i915 appears to rely on blocking modesets on no-longer-present MSTB ports by simply returning NULL for ->best_encoder(), which in turn causes any new atomic commits that don't disable the CRTC to fail. This is wrong however, since we still want to allow userspace to disable CRTCs on no-longer-present MSTB ports by changing the DPMS state to off and this still requires that we retrieve an encoder. So, fix this by always returning a valid encoder regardless of the state of the MST port. Additionally, make intel_dp_mst_atomic_check() simply rely on drm_dp_mst_connector_atomic_check() to prevent new modesets on no-longer-present MSTB ports. Signed-off-by: Lyude Paul Cc: stable@vger.kernel.org --- drivers/gpu/drm/i915/intel_dp_mst.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c index a366f32b048a..2b798d4592f0 100644 --- a/drivers/gpu/drm/i915/intel_dp_mst.c +++ b/drivers/gpu/drm/i915/intel_dp_mst.c @@ -106,14 +106,21 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder, } static int intel_dp_mst_atomic_check(struct drm_connector *connector, - struct drm_connector_state *new_conn_state) + struct drm_connector_state *new_conn_state) { struct drm_atomic_state *state = new_conn_state->state; struct drm_connector_state *old_conn_state; struct drm_crtc *old_crtc; struct drm_crtc_state *crtc_state; + struct drm_dp_mst_topology_mgr *mgr = + &to_intel_connector(connector)->mst_port->mst_mgr; int slots, ret = 0; + ret = drm_dp_mst_connector_atomic_check(connector, new_conn_state, + mgr); + if (ret) + return ret; + old_conn_state = drm_atomic_get_old_connector_state(state, connector); old_crtc = old_conn_state->crtc; if (!old_crtc) @@ -122,12 +129,6 @@ static int intel_dp_mst_atomic_check(struct drm_connector *connector, crtc_state = drm_atomic_get_new_crtc_state(state, old_crtc); slots = to_intel_crtc_state(crtc_state)->dp_m_n.tu; if (drm_atomic_crtc_needs_modeset(crtc_state) && slots > 0) { - struct drm_dp_mst_topology_mgr *mgr; - struct drm_encoder *old_encoder; - - old_encoder = old_conn_state->best_encoder; - mgr = &enc_to_mst(old_encoder)->primary->dp.mst_mgr; - ret = drm_dp_atomic_release_vcpi_slots(state, mgr, slots); if (ret) DRM_DEBUG_KMS("failed releasing %d vcpi slots:%d\n", slots, ret); @@ -407,8 +408,6 @@ static struct drm_encoder *intel_mst_atomic_best_encoder(struct drm_connector *c struct intel_dp *intel_dp = intel_connector->mst_port; struct intel_crtc *crtc = to_intel_crtc(state->crtc); - if (intel_connector->mst_port_gone) - return NULL; return &intel_dp->mst_encoders[crtc->pipe]->base.base; } -- 2.17.1