Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp580601pxa; Tue, 4 Aug 2020 12:34:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxIoZVlWhSXcpRJbZks5YECo5PT8P7tyfSahamoPVn2b4xKMT6B8ieG2aw/kidtR9gVNPAU X-Received: by 2002:a05:6402:456:: with SMTP id p22mr21469640edw.177.1596569673704; Tue, 04 Aug 2020 12:34:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596569673; cv=none; d=google.com; s=arc-20160816; b=UC4RRno2jZriP2j6dhUNXSwswg/W21efJ0gxcffbBRLo80YgNPoLrbDEk3ljLeBKyr zvyR4rDfihLtMALJFuBpBbXIOhWeZzpRthyNCMf/T+GaTAPFBvoHgome46P0akopJULG I0oNcKKEOQxDU/NDs+uN8oYGWw75ITWEL73WCvxccuuakM3jc6Ph024WLHffMMMZJQ6g Du6g6lLmPofz5aZs2OSQUk775/FDE3Z+wZRWy9BQCASQQ8W0A+eNkOzirwZuw0cMz3TW 8u9j5t5Ipq1BAGbgPSNpcNYVLvdCcrKLiCF3DnzTSys2Odvk+0oAbXDslLtT5t/DzmSu SuFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=lPQhi2EGIWphqgXXS6/LgcuZPutzCILAsqJJu6qo/8w=; b=SabQtm0mWCk/3tGzcQHQm+su9d6aYeyn3Z6zOQHW988/5b8lOQIcuF4vRsZh0tAvAj Z7AixD8TTzfIH4Z/uZBkQPi2w+DmMbVW1WWh6oaQSsM9lYpvoDDOYMnM+2CmH3o/1Rir xn2rIYEJpwAAqEf+ZCMRj2KGu+p+W34bpLbCqIjwIL14x79uHZI00hfWolmRp8uvpJiI LRjdtTOF0ZGM6zYQUKBhNO/OeenvVstgZHX1OwbXaanLEo+KSu4Ycqy2nRwxTWcu1wVS Dxb/O1rskl4Je1jQIgbWtDLh7oyaoenjIP+xhiLVF1ejpgHJ3Udd1dL/FUBDjOZ9DEcA AlfQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=b22tYC6z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u6si11592912edd.428.2020.08.04.12.34.10; Tue, 04 Aug 2020 12:34:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=b22tYC6z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727929AbgHDTbt (ORCPT + 99 others); Tue, 4 Aug 2020 15:31:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726027AbgHDTbr (ORCPT ); Tue, 4 Aug 2020 15:31:47 -0400 Received: from mail-ed1-x541.google.com (mail-ed1-x541.google.com [IPv6:2a00:1450:4864:20::541]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B68B7C06174A; Tue, 4 Aug 2020 12:31:46 -0700 (PDT) Received: by mail-ed1-x541.google.com with SMTP id q4so27510778edv.13; Tue, 04 Aug 2020 12:31:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=lPQhi2EGIWphqgXXS6/LgcuZPutzCILAsqJJu6qo/8w=; b=b22tYC6z9W/pbIRO7pJWfs9ARLlciURv3Ksmck7YruC7f5u3NH1DKq5lVFgz/t3qqV W/JlYe5Bl2+t9oCR8Sm1qfSKQzMujgg9Wg2C7ZkGJaLqh6A5jLqskKrWqViCYnmNo2L+ nv8/HgDn0+cqpExXpEniNbSJ6qBDHGZm0HQQZQT3fdWO9PhLxX8N/ASz+EutLp3lgAfl ZaJExNIczPugzHIw3Mr9HKcuQzQduUi6thP4zEXv05vIbEYRCHykgfBC2e9kebRjQJfh UtetO4nSPpY1RhZbbDpNiLPTTrmkAqr6t4wGjJV1NHzPoWjmNP1koKNIZD7ta2+c2X/X ssQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=lPQhi2EGIWphqgXXS6/LgcuZPutzCILAsqJJu6qo/8w=; b=G6wZe8UNHVApQ5lwizhuL/8Bws9Zniz3zUiprdS8fNhJha/PE0+Eh+vIl6WqaklvAt P8Ec6t9/Z18SCRsfDNmqgvK+ErwT9NV9JYGMBNkEsuVJ2TueAF5Jd4fcGpzJGDvSBz1U 7YY3ahax4t/Nfz6d95nrr7ak1YF1v+8mUZW2kmC8yQ2iS/eMRhkBJj3efJr36tktIIA+ NC/fFzfmtNdgkWIMxH9OcYQ/1cOzCnpv3A6colUH7aWlAdTdplYkWPkR+4KJf4YB5G/+ j6y0E6hBrgvAbOJaVI2gYrEq8CINFm2BYR9jGc3SCfBlyBJNXMwyx+eAYU8T4XzzELEc WoNA== X-Gm-Message-State: AOAM533c/IBhMYXapF6XCJdcCXQvGKxKUpv45up+V4UkMC3v8h11vuZR H1K0zo0Go5849YML+AKE6cz1cT1zSEVsCuY6Cyc= X-Received: by 2002:a50:fd16:: with SMTP id i22mr21981071eds.281.1596569505319; Tue, 04 Aug 2020 12:31:45 -0700 (PDT) MIME-Version: 1.0 References: <1596540744-6902-1-git-send-email-kalyan_t@codeaurora.org> In-Reply-To: <1596540744-6902-1-git-send-email-kalyan_t@codeaurora.org> From: Rob Clark Date: Tue, 4 Aug 2020 12:32:29 -0700 Message-ID: Subject: Re: [v1] drm/msm/dpu: update reservations in commit path To: Kalyan Thota Cc: dri-devel , linux-arm-msm , freedreno , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Linux Kernel Mailing List , Sean Paul , "Kristian H. Kristensen" , Douglas Anderson , Krishna Manikandan , Raviteja Tamatam , nganji@codeaurora.org, Stephen Boyd , Abhinav Kumar , Drew Davenport Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Aug 4, 2020 at 4:32 AM Kalyan Thota wrote: > > DPU resources reserved in the atomic_check path gets unwinded > during modeset operation before commit happens in a non seamless > transition. > > Update the reservations in the commit path to avoid resource > failures. Secondly have dummy reservations in atomic_check path > so that we can gracefully fail the composition if resources are > not available. > > Signed-off-by: Kalyan Thota > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > index 63976dc..c6b8254 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > @@ -565,7 +565,7 @@ static int dpu_encoder_virt_atomic_check( > const struct drm_display_mode *mode; > struct drm_display_mode *adj_mode; > struct msm_display_topology topology; > - struct dpu_global_state *global_state; > + struct dpu_global_state tmp_resv_state; > int i = 0; > int ret = 0; > > @@ -582,7 +582,7 @@ static int dpu_encoder_virt_atomic_check( > dpu_kms = to_dpu_kms(priv->kms); > mode = &crtc_state->mode; > adj_mode = &crtc_state->adjusted_mode; > - global_state = dpu_kms_get_existing_global_state(dpu_kms); > + memset(&tmp_resv_state, 0, sizeof(tmp_resv_state)); I think what you want to do is dpu_kms_get_global_state().. that will clone/duplicate the existing global state (or return the already duplicated global state if it is called multiple times). It is safe to modify this global state in the atomic_check() path.. in fact that is the intention. For a TEST_ONLY atomic commit, or if any of the atomic_check()'s fail, this new duplicated global state is discarded. If all the checks succeed and the atomic update is committed to hw, this new global state replaces the existing global state. BR, -R > trace_dpu_enc_atomic_check(DRMID(drm_enc)); > > /* > @@ -621,7 +621,7 @@ static int dpu_encoder_virt_atomic_check( > * info may not be available to complete reservation. > */ > if (drm_atomic_crtc_needs_modeset(crtc_state)) { > - ret = dpu_rm_reserve(&dpu_kms->rm, global_state, > + ret = dpu_rm_reserve(&dpu_kms->rm, &tmp_resv_state, > drm_enc, crtc_state, topology); > } > } > @@ -966,7 +966,7 @@ static void dpu_encoder_virt_mode_set(struct drm_encoder *drm_enc, > struct dpu_hw_blk *hw_lm[MAX_CHANNELS_PER_ENC]; > struct dpu_hw_blk *hw_dspp[MAX_CHANNELS_PER_ENC] = { NULL }; > int num_lm, num_ctl, num_pp, num_dspp; > - int i, j; > + int i, j, rc; > > if (!drm_enc) { > DPU_ERROR("invalid encoder\n"); > @@ -1006,6 +1006,13 @@ static void dpu_encoder_virt_mode_set(struct drm_encoder *drm_enc, > > topology = dpu_encoder_get_topology(dpu_enc, dpu_kms, adj_mode); > > + rc = dpu_rm_reserve(&dpu_kms->rm, global_state, drm_enc, > + drm_crtc->state, topology); > + if (rc) { > + DPU_ERROR_ENC(dpu_enc, "Failed to reserve resources\n"); > + return; > + } > + > /* Query resource that have been reserved in atomic check step. */ > num_pp = dpu_rm_get_assigned_resources(&dpu_kms->rm, global_state, > drm_enc->base.id, DPU_HW_BLK_PINGPONG, hw_pp, > -- > 1.9.1 >