From patchwork Fri Dec 14 01:25:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lyude Paul X-Patchwork-Id: 10730205 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1E2DD91E for ; Fri, 14 Dec 2018 01:26:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0C702285BE for ; Fri, 14 Dec 2018 01:26:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F3CCD2CCB6; Fri, 14 Dec 2018 01:26:31 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5FC2B285BE for ; Fri, 14 Dec 2018 01:26:31 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 484A16E01A; Fri, 14 Dec 2018 01:26:27 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id ECC2B6E01A; Fri, 14 Dec 2018 01:26:25 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5FB24C04958C; Fri, 14 Dec 2018 01:26:24 +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 1D696600C5; Fri, 14 Dec 2018 01:26:21 +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 Date: Thu, 13 Dec 2018 20:25:29 -0500 Message-Id: <20181214012604.13746-1-lyude@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Fri, 14 Dec 2018 01:26:25 +0000 (UTC) Subject: [Intel-gfx] [WIP PATCH 00/15] MST refcounting/atomic helpers cleanup X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-doc@vger.kernel.org, David Airlie , Jonathan Corbet , linux-kernel@vger.kernel.org, Karol Herbst , Maxime Ripard , Jerry Zuo , Sean Paul , Ben Skeggs , Rodrigo Vivi , Harry Wentland , Ilia Mirkin Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP This is a WIP version of the series I've been working on for a while now to get all of the atomic DRM drivers in the tree to use the atomic MST helpers, and to make the atomic MST helpers actually idempotent. Turns out it's a lot more difficult to do that without also fixing how port and branch device refcounting works so that it actually makes sense, since the current upstream implementation requires a ton of magic in the atomic helpers to work around properly and in many situations just plain doesn't work as intended. This patch series is starting to get bigger, and since there's still a few bits here and there regarding the new refcount implementation that I haven't quite decided on yet I figured I should get an opinion from everyone else. Currently I've got a couple of thoughts on how I could improve this further: * Get rid of drm_dp_mst_get_*_validated() entirely - I'm 90% sure that with the new refcounting scheme we might not actually need port validation at all anymore, assuming we make the use of malloc references in all of the DRM drivers. Either way, I don't think validation was ever actually a concept that worked: without malloc references, the port or branch device that's being passed to drm_dp_mst_get_*_validated() could be freed which also in turn means that that the stale pointer could in theory have gotten reused for a new port and thus-cause us to consider a freed port validated. * Get rid of drm_dp_mst_get_vcpi_slots() - with malloc references, I don't think there's any use for this either * Get rid of drm_dp_mst_reset_vcpi_slots() - I think the only time this function ever made sense was with port validation? Honestly, I wonder if we ever needed this at all... Note: I haven't applied some of the comments from the reviews for the series this is based off of: drm/dp_mst: Improve VCPI helpers, use in nouveau https://patchwork.freedesktop.org/series/51414/ This is just getting put on the ML so I can get some feedback on this. Lyude Paul (15): drm/dp_mst: Remove bogus conditional in drm_dp_update_payload_part1() drm/dp_mst: Refactor drm_dp_update_payload_part1() drm/dp_mst: Introduce new refcounting scheme for mstbs and ports drm/dp_mst: Stop releasing VCPI when removing ports from topology drm/dp_mst: Fix payload deallocation on hotplugs using malloc refs drm/i915: Keep malloc references to MST ports drm/nouveau: Remove bogus cleanup in nv50_mstm_add_connector() drm/nouveau: Remove unnecessary VCPI checks in nv50_msto_cleanup() drm/nouveau: Fix potential use-after-frees for MSTCs drm/nouveau: Stop unsetting mstc->port, use malloc refs drm/nouveau: Grab payload lock in nv50_msto_payload() drm/dp_mst: Add some atomic state iterator macros drm/dp_mst: Start tracking per-port VCPI allocations drm/dp_mst: Check payload count in drm_dp_mst_atomic_check() drm/nouveau: Use atomic VCPI helpers for MST .../gpu/dp-mst/topology-figure-1.dot | 31 + .../gpu/dp-mst/topology-figure-2.dot | 37 + .../gpu/dp-mst/topology-figure-3.dot | 40 + Documentation/gpu/drm-kms-helpers.rst | 125 ++- drivers/gpu/drm/drm_dp_mst_topology.c | 910 ++++++++++++++---- drivers/gpu/drm/i915/intel_connector.c | 4 + drivers/gpu/drm/i915/intel_display.c | 4 + drivers/gpu/drm/i915/intel_dp_mst.c | 66 +- drivers/gpu/drm/nouveau/dispnv50/disp.c | 94 +- include/drm/drm_dp_mst_helper.h | 139 ++- 10 files changed, 1178 insertions(+), 272 deletions(-) create mode 100644 Documentation/gpu/dp-mst/topology-figure-1.dot create mode 100644 Documentation/gpu/dp-mst/topology-figure-2.dot create mode 100644 Documentation/gpu/dp-mst/topology-figure-3.dot