Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1529541imu; Thu, 13 Dec 2018 17:29:29 -0800 (PST) X-Google-Smtp-Source: AFSGD/W0rccx0ir17tY7co7eDMaKUBUejV08cUFls4tljJ0F26rjCV9Zf1nz1bdwGkOcdGO/NoQB X-Received: by 2002:a63:7418:: with SMTP id p24mr987317pgc.196.1544750969884; Thu, 13 Dec 2018 17:29:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544750969; cv=none; d=google.com; s=arc-20160816; b=Jj5P/W38cqGU3hNS/9HoSaq5t8qzTsikIu0QBTPjaRXR6c0+hFrU59RFg4Nj6DXvaT 4hw7xCuhsqmcq1ZCfLNCIKS1nAANrHC04PW4NAu3w21oqD2yB9stfZ2pwzLZmSuzdn0u lJyNWMPtynZapgcv/x26KxZYFqqSxvRAlFdXWgF9M7UqA/RqmQeQgf0V7xBrjnkO4x9z HYPABwj2wUtHbJnHWosSfsOWzLUfpDBZ8bpq6RM0bJ0J9MgjOnhV6YXTh6XffcCMyxMX BpnlmyKRQMEwwpdCREsm2B5OFFgaB9uef2FcuFpIaa4cVJVF/PE3JnOhZC9N3kumxz7I rkEg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=DQa9HTEGlSfdYLn6POq0liQwpq5C1Kfp+ARdPRTBB8M=; b=fOrM8rUUl9ihcdpN/jhyRGxw3i2vaJ28CiI0trWvtbOSCH6kGt2tO0Vfxqtitsg24D Szgdi4o6FcmP2HszUNXbPaTxB/uQ5Xqe8Vyw9arih2oQQYXo20m0kKzA2X9pfqbDmael qWC4kZ2ZBI6Vjz9Ow6aIkOPnOmzsfUqYxo9cQFC8D0KGj5o4+OlXgXNIjCf7acbwWshj TE+TmE1TZmYoSFIlEn7KHQf7U0lNcUlHE5GQuTOejsabXjdizh1zs8sjBUpahHyc9XGm Cu05XMdGfI5PlQiJvkIvm3U5frzeMyISk2Y/VZ8R/xQyGTbkMEK2lHov1T6ddkJU25Wu C1+w== 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 d12si2862513pgf.470.2018.12.13.17.29.14; Thu, 13 Dec 2018 17:29:29 -0800 (PST) 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 S1729619AbeLNB1I (ORCPT + 99 others); Thu, 13 Dec 2018 20:27:08 -0500 Received: from mx1.redhat.com ([209.132.183.28]:44032 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729601AbeLNB1H (ORCPT ); Thu, 13 Dec 2018 20:27:07 -0500 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 2CEE8C03BC9B; Fri, 14 Dec 2018 01:27:07 +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 B91A8600C5; Fri, 14 Dec 2018 01:27:05 +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: Daniel Vetter , Dave Airlie , Harry Wentland , Jerry Zuo , Ben Skeggs , David Airlie , Ilia Mirkin , Karol Herbst , linux-kernel@vger.kernel.org Subject: [WIP PATCH 11/15] drm/nouveau: Grab payload lock in nv50_msto_payload() Date: Thu, 13 Dec 2018 20:25:40 -0500 Message-Id: <20181214012604.13746-12-lyude@redhat.com> In-Reply-To: <20181214012604.13746-1-lyude@redhat.com> References: <20181214012604.13746-1-lyude@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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.32]); Fri, 14 Dec 2018 01:27:07 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Going through the currently programmed payloads isn't safe without holding mgr->payload_lock, so actually do that and warn if anyone tries calling nv50_msto_payload() in the future without grabbing the right locks. Signed-off-by: Lyude Paul --- drivers/gpu/drm/nouveau/dispnv50/disp.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c index 157d208d37b5..67f7bf97e5d9 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c @@ -680,6 +680,8 @@ nv50_msto_payload(struct nv50_msto *msto) struct nv50_mstm *mstm = mstc->mstm; int vcpi = mstc->port->vcpi.vcpi, i; + WARN_ON(!mutex_is_locked(&mstm->mgr.payload_lock)); + NV_ATOMIC(drm, "%s: vcpi %d\n", msto->encoder.name, vcpi); for (i = 0; i < mstm->mgr.max_payloads; i++) { struct drm_dp_payload *payload = &mstm->mgr.payloads[i]; @@ -733,6 +735,8 @@ nv50_msto_prepare(struct nv50_msto *msto) (0x0100 << msto->head->base.index), }; + mutex_lock(&mstm->mgr.payload_lock); + NV_ATOMIC(drm, "%s: msto prepare\n", msto->encoder.name); if (mstc->port->vcpi.vcpi > 0) { struct drm_dp_payload *payload = nv50_msto_payload(msto); @@ -748,7 +752,9 @@ nv50_msto_prepare(struct nv50_msto *msto) msto->encoder.name, msto->head->base.base.name, args.vcpi.start_slot, args.vcpi.num_slots, args.vcpi.pbn, args.vcpi.aligned_pbn); + nvif_mthd(&drm->display->disp.object, 0, &args, sizeof(args)); + mutex_unlock(&mstm->mgr.payload_lock); } static int -- 2.19.2