Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp40008imm; Tue, 18 Sep 2018 16:07:57 -0700 (PDT) X-Google-Smtp-Source: ANB0Vdbh+YW48WWqaW8zyUg4lK+dUrN2IAWfrPtAiRH7yJfn2c2z5pxS43492dJcX1wbkle2StSl X-Received: by 2002:a63:6343:: with SMTP id x64-v6mr30054334pgb.173.1537312076888; Tue, 18 Sep 2018 16:07:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537312076; cv=none; d=google.com; s=arc-20160816; b=IP1jPhEZ5LG3Z115c4Ty1l+aefp1xFMIyR05fymBH6Emc+lr9kTI6NBSnG7Bm0X7vK CEcrDUtw03oRJh0QlWiYoK4KU7jNu+F+TVnwu2J0mctHfPnOWNQQSvcvRtJu4N4IOJW4 ICzOqKaHlj1bN5j1cct4NTL4AktomfuYuJW+1/afGhiWw4tKfxy8tTBmrIgGmbrCdph4 9n8iQy4wUjCeXqW4VVV0f23R/So7gcE2YMjQO9nezMKS2/2hnrnN7yF7ChBTTmjLZOfg cAHlcCxLYgpWJnIxh9bTesEza/cPQjYqWwReu9J/57PM4iIFgQYgkFMVirSmR/r05yN2 3fUw== 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=T0XFJWACePTqhInTlGeRhJlir73BSfKfCo2Mv5gqjA0=; b=eBrbojLnp842PSRx12FvONXZTsEFNAE1Mwtpq92p8HJPsy6Y00sJEtPPWE0iCtqwkf ODGfPleZ4S/g5W7oPgC6Wy4Sqs7HMkPmtDilsUw1gRfMz8wrp126T1kNu6naR8iiIf/I jxXKfyD1ufzFVwD+6hSF7Wc8jy0RZx3w5OEWd/h9+FD0gebLyE4SYBnrRQCLwFZpzOY5 V7R9AwZpgTDl275MRbaH2SktIerXhEQ7eWyz/pd+3F9P7mGltpg3JAIeXcFIO3dI/94y Oh0DCC8XUt+IR8BnNDwby8j9PcmYaoOz0cFl0nKHMzWUe1c/cGD4QpyG+jo2Ntsgca5g kiOA== 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 m61-v6si19889290plb.296.2018.09.18.16.07.41; Tue, 18 Sep 2018 16:07:56 -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 S1729736AbeISEmD (ORCPT + 99 others); Wed, 19 Sep 2018 00:42:03 -0400 Received: from mx1.redhat.com ([209.132.183.28]:38868 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725873AbeISEmC (ORCPT ); Wed, 19 Sep 2018 00:42:02 -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 08897308A95E; Tue, 18 Sep 2018 23:07:12 +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 3B0AB7A435; Tue, 18 Sep 2018 23:07:09 +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 3/6] drm/i915: Leave intel_conn->mst_port set, use mst_port_gone instead Date: Tue, 18 Sep 2018 19:06:19 -0400 Message-Id: <20180918230637.20700-4-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.41]); Tue, 18 Sep 2018 23:07:12 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently we set intel_connector->mst_port to NULL to signify that the MST port has been removed from the system so that we can prevent further action on the port such as connector probes, mode probing, etc. However, we're going to need access to intel_connector->mst_port in order to fixup ->best_encoder() so that it can always return the correct encoder for an MST port to prevent legacy DPMS prop changes from failing. This should be safe, so instead keep intel_connector->mst_port always set and instead add intel_connector->mst_port_gone in order to signify whether or not the connector has disappeared from the system. Signed-off-by: Lyude Paul Cc: stable@vger.kernel.org --- drivers/gpu/drm/i915/intel_dp_mst.c | 14 +++++++------- drivers/gpu/drm/i915/intel_drv.h | 1 + 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c index 4ecd65375603..fcb9b87b9339 100644 --- a/drivers/gpu/drm/i915/intel_dp_mst.c +++ b/drivers/gpu/drm/i915/intel_dp_mst.c @@ -311,9 +311,8 @@ static int intel_dp_mst_get_ddc_modes(struct drm_connector *connector) struct edid *edid; int ret; - if (!intel_dp) { + if (intel_connector->mst_port_gone) return intel_connector_update_modes(connector, NULL); - } edid = drm_dp_mst_get_edid(connector, &intel_dp->mst_mgr, intel_connector->port); ret = intel_connector_update_modes(connector, edid); @@ -328,9 +327,10 @@ intel_dp_mst_detect(struct drm_connector *connector, bool force) struct intel_connector *intel_connector = to_intel_connector(connector); struct intel_dp *intel_dp = intel_connector->mst_port; - if (!intel_dp) + if (intel_connector->mst_port_gone) return connector_status_disconnected; - return drm_dp_mst_detect_port(connector, &intel_dp->mst_mgr, intel_connector->port); + return drm_dp_mst_detect_port(connector, &intel_dp->mst_mgr, + intel_connector->port); } static void @@ -370,7 +370,7 @@ intel_dp_mst_mode_valid(struct drm_connector *connector, int bpp = 24; /* MST uses fixed bpp */ int max_rate, mode_rate, max_lanes, max_link_clock; - if (!intel_dp) + if (intel_connector->mst_port_gone) return MODE_ERROR; if (mode->flags & DRM_MODE_FLAG_DBLSCAN) @@ -402,7 +402,7 @@ 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_dp) + if (intel_connector->mst_port_gone) return NULL; return &intel_dp->mst_encoders[crtc->pipe]->base.base; } @@ -514,7 +514,7 @@ static void intel_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr, connector); /* prevent race with the check in ->detect */ drm_modeset_lock(&connector->dev->mode_config.connection_mutex, NULL); - intel_connector->mst_port = NULL; + intel_connector->mst_port_gone = true; drm_modeset_unlock(&connector->dev->mode_config.connection_mutex); drm_connector_put(connector); diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 8fc61e96754f..87ce772ae7f8 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -409,6 +409,7 @@ struct intel_connector { void *port; /* store this opaque as its illegal to dereference it */ struct intel_dp *mst_port; + bool mst_port_gone; /* Work struct to schedule a uevent on link train failure */ struct work_struct modeset_retry_work; -- 2.17.1