Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp39315imm; Thu, 4 Oct 2018 17:31:39 -0700 (PDT) X-Google-Smtp-Source: ACcGV60dZD+NSXP7N/6yaQHTkS5udsGPSBR/YwjQW48Fcw7Mkx3yYSpI2R2YpTkswriDMkSNvnBJ X-Received: by 2002:a62:104b:: with SMTP id y72-v6mr9262919pfi.113.1538699498961; Thu, 04 Oct 2018 17:31:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538699498; cv=none; d=google.com; s=arc-20160816; b=fWhByrMPDhv3eMkZUHMILtI9Q7bKN8zatkv7zDotqFh9AlAEt9ZYDyfDBkMFKQEeJr 8TxZUmz1TpGqfYff7tEVpdMzH162PQCD84L/uGQ0q1TQEz6CX+oh31MCX+4eItCgtXHi DoG34Wlj8OVaQq3rcZnIyj3gszeMkWLtIb0XAictYNNPV16uq11ZaGq4JyriGeG2x34q 8iFzoYRXn7IfEEvZGn1m4gs3iIIig6gLLM05of7nL62HULYUHHSMtYIDOE9BakEb2kTG x9HN8HZt554KHxxD1M2LuyKGmRaiPmYijr9TdbXkK7jtDUoD2TopOf1Iwo+3LnIFnC0V ZLpg== 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=1TxlLWt7ko2ndm7Q0BuJXNzXn9TqzNGOBUkOw0Zh1sM=; b=Tw76I0zH0udmwZnphNZK4wNL+EHYeoauDs5dGmdSyqwFymf4V1PNEFChZJAd6HmMfr Z/tgeCOEErrTnWhHVmhUKqBb0KR2ra9geX1EoRcV2QMNJpGQgyApikvIV0Bdgv+1N8Rr b477zMBlss044kQknU9/LpyBMBUYKZpX0ClA4JYcwJvlJRHkma+VKwrgxph51lbZWdlj 0VC6dvJFL8WgCc+Y/pF8UFpPFSXnikctKCO0aactAs+mHSdvCnMWMayvyWB28rOMUXKm keaFB76hV8zm22BwKe5CQ8q8txXbD5yXGU/6bAA08IBFAUedRTKqcuHDjE15TMUEuJ1f a1QQ== 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 j3-v6si6472656pld.380.2018.10.04.17.31.21; Thu, 04 Oct 2018 17:31:38 -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 S1727624AbeJEH0Y (ORCPT + 99 others); Fri, 5 Oct 2018 03:26:24 -0400 Received: from mx1.redhat.com ([209.132.183.28]:59204 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726073AbeJEH0X (ORCPT ); Fri, 5 Oct 2018 03:26:23 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1C81688314; Fri, 5 Oct 2018 00:30:19 +0000 (UTC) Received: from malachite.bss.redhat.com (dhcp-10-20-1-11.bss.redhat.com [10.20.1.11]) by smtp.corp.redhat.com (Postfix) with ESMTP id EDDDA675DC; Fri, 5 Oct 2018 00:30:17 +0000 (UTC) From: Lyude Paul To: nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Cc: Daniel Vetter , Jani Nikula , stable@vger.kernel.org, Joonas Lahtinen , Rodrigo Vivi , David Airlie , linux-kernel@vger.kernel.org Subject: [PATCH v4 3/5] drm/i915: Leave intel_conn->mst_port set, use mst_port_gone instead Date: Thu, 4 Oct 2018 20:29:52 -0400 Message-Id: <20181005002956.7317-4-lyude@redhat.com> In-Reply-To: <20181005002956.7317-1-lyude@redhat.com> References: <20181005002956.7317-1-lyude@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Fri, 05 Oct 2018 00:30:19 +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. Changes since v2: - Add a comment to mst_port_gone (Jani Nikula) - Change mst_port_gone to a u8 instead of a bool, per the kernel bot. Apparently bool is discouraged in structs these days 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 | 6 ++++++ 2 files changed, 13 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..8261d4579452 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -410,6 +410,12 @@ struct intel_connector { struct intel_dp *mst_port; + /* + * Set to 1 if this is an MST connector that was removed from the + * system and unregistered from sysfs + */ + u8 mst_port_gone; + /* Work struct to schedule a uevent on link train failure */ struct work_struct modeset_retry_work; -- 2.17.1