Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1921390pxj; Sun, 30 May 2021 07:32:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzPRPppiDr40Dm4QscvaIQoLbPLtpJcC2Zh2n16iQYIuppgdUX4JpG0dJFpdUen1Rkbez5c X-Received: by 2002:a6b:3119:: with SMTP id j25mr13401558ioa.64.1622385175222; Sun, 30 May 2021 07:32:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622385175; cv=none; d=google.com; s=arc-20160816; b=y6AcghMxWmAykaH08snUQDA7tp1CNgQmN7ZSRdaPS0DqnLZ2myDWq64y2EZ8b+EPs2 9Hl/dTMr+YhooIdhKVxGjzRxyAW/HxNxooBabpdwgtKSb2DMVdGaqDQFfRiKHggBfh2I eyl7hR1Vc+zdK4ZBE97tqSHgIHvGKnbUl9by6xCeWFJfAnFE+mHCdiNDzSjliWagP1zF 2h0AXXNAJNAIhMAfZ0NzM+vqfYs3fLYQb4sF1vBYWKi7WfVfBAX4P8tEMqqgUTubPWJJ fXiQnc3vlKEOO5Vi/KgRZhh1QlG3zHKFM8PxIAZqt3UIfPMF4JPbfBoNoWJb/FR4zdgs 8P9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=6t3J8+C30P/KwAn8557WaaRrcOqXcNIb28Eid5rS1Ss=; b=ucDnW26yT2reWUzD0N54pUe7tO67mdj+lu9RGwht7aUp/4c81TjmrXTJz+WySfcc9m 2Nke1uzLGONPW0+rn9YypYadoZAJHyOFjN8zoWvb+WYHWz60Uy+/xVSWc14UacpTGl8Y 7rlboR6H58f4jfawecWh8+PcJPDgRlghuzZ+FXVIHyDfU3NFnyygOQWe0iVBVIK9hJ+U R/j5Pei9cXT9EZitar9IwtSjnraapvVPPxFECB76SO63+2WTQxGS0cd6DWdkjMQ67G8W XCA3WFPZikg666/JKHwO2iooEg+/JGGYr4kBWcSQcG4ipUrq2I3C9nyeOkQY6wDi/nA2 kxXg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=uDiPnuGh; 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 i13si13657723ilm.45.2021.05.30.07.32.14; Sun, 30 May 2021 07:32:55 -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=uDiPnuGh; 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 S229714AbhE3Obp (ORCPT + 99 others); Sun, 30 May 2021 10:31:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37608 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229580AbhE3Obp (ORCPT ); Sun, 30 May 2021 10:31:45 -0400 Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3AE22C061574; Sun, 30 May 2021 07:30:07 -0700 (PDT) Received: by mail-wr1-x42e.google.com with SMTP id n4so8161789wrw.3; Sun, 30 May 2021 07:30:07 -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=6t3J8+C30P/KwAn8557WaaRrcOqXcNIb28Eid5rS1Ss=; b=uDiPnuGhAkjMt19s6NVzVAetw8pr0xYSnhO63poVhU4hCJOekF0HGoE4aMDYoqR33N HRnpfTNujtuSGbWd9ANiJ/MF2XYmKGk+xiSv859C/IgmNHliyXuCdL1CwK4PIlbM0DVS SQo21M/DhdMadVTLrl8mKwQvsI6fv/Y4LkRS7cg4LEyQh7xjHJlaJSFvqnJUQ8cx9C5L BQWIo4ueeTzmuvrnd6Mk4KB+Oqg9OjemlXdXCJkG7PU3ChMLYMqy/5PcbsYsWiV5xtVA wxsYZ+Ju/LbkKSTGgfya9Dho3Kq8auLYeaBWuoyu9EdTPGKwLg5wIcg7SCpaDiikQ9WH ptfQ== 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=6t3J8+C30P/KwAn8557WaaRrcOqXcNIb28Eid5rS1Ss=; b=VZ9SCVMM61F8/PhWWf4Iaoy95zmqGIzIohMKXMhy6yyYlZ3Sr7JWaDoiW1XxTlGV8s JZP339SYRqlWLKhlOgSJsMU3xrbNuDaRcIde2/ILknibCfRm/TzxfsfOTj8cNjtXG//l fXe4P/VY4RQqaAhRh+g2am6Ni2/aSZFBVpDTYsWeAVeHrWWaCDtEuqyB05LaGN35TmXC QcRjPYKaQD38SshRjQLvSb8cTHZmK63EaIK5ueW+WQFrPAZzfJ4QymOo6iolRA7iCsog kRU6cyNd2AplJLfXIVIrx684d7OUUcO7nsnCBTUOsYsuAeuLs0kabd5uyzifTvp2WBxe 7E9g== X-Gm-Message-State: AOAM533WaQpD+bB6RIbNhCs9mXRBh1FbIiFzOKM2WjZl/5kjCATO8Aqn i7qgdjxdZH3nRQjuImvqwDhZgzCosT0OT/YAwSc= X-Received: by 2002:adf:ec10:: with SMTP id x16mr9704649wrn.83.1622385005776; Sun, 30 May 2021 07:30:05 -0700 (PDT) MIME-Version: 1.0 References: <20210519183855.1523927-1-robdclark@gmail.com> <20210519183855.1523927-3-robdclark@gmail.com> In-Reply-To: From: Rob Clark Date: Sun, 30 May 2021 07:33:57 -0700 Message-ID: Subject: Re: [RFC 2/3] drm/atomic: Call dma_fence_boost() when we've missed a vblank To: Rob Clark , dri-devel , freedreno , linux-arm-msm , Rob Clark , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , open list , Matthew Brost Cc: Daniel Vetter Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, May 20, 2021 at 9:29 AM Daniel Vetter wrote: > > On Wed, May 19, 2021 at 11:38:53AM -0700, Rob Clark wrote: > > From: Rob Clark > > > > Signed-off-by: Rob Clark > > --- > > drivers/gpu/drm/drm_atomic_helper.c | 11 +++++++++++ > > 1 file changed, 11 insertions(+) > > > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > > index 560aaecba31b..fe10fc2e7f86 100644 > > --- a/drivers/gpu/drm/drm_atomic_helper.c > > +++ b/drivers/gpu/drm/drm_atomic_helper.c > > @@ -1435,11 +1435,15 @@ int drm_atomic_helper_wait_for_fences(struct drm_device *dev, > > int i, ret; > > > > for_each_new_plane_in_state(state, plane, new_plane_state, i) { > > + u64 vblank_count; > > + > > if (!new_plane_state->fence) > > continue; > > > > WARN_ON(!new_plane_state->fb); > > > > + vblank_count = drm_crtc_vblank_count(new_plane_state->crtc); > > + > > /* > > * If waiting for fences pre-swap (ie: nonblock), userspace can > > * still interrupt the operation. Instead of blocking until the > > @@ -1449,6 +1453,13 @@ int drm_atomic_helper_wait_for_fences(struct drm_device *dev, > > if (ret) > > return ret; > > > > + /* > > + * Check if we've missed a vblank while waiting, and if we have > > + * signal the fence that it's signaler should be boosted > > + */ > > + if (vblank_count != drm_crtc_vblank_count(new_plane_state->crtc)) > > + dma_fence_boost(new_plane_state->fence); > > I think we should do a lot better here: > - maybe only bother doing this for single-crtc updates, and only if > modeset isn't set. No one else cares about latency. > > - We should boost _right_ when we've missed the frame, so I think we > should have a _timeout wait here that guesstimates when the vblank is > over (might need to throw in a vblank wait if we missed) and then boost > immediately. Not wait a bunch of frames (worst case) until we finally > decide to boost. I was thinking about this a bit more.. How about rather than calling some fence->op->boost() type thing when we are about to miss a vblank (IMO that is also already too late), we do something more like fence->ops->set_deadline() before we even wait? It's probably a bit impossible for a gpu driver to really predict how long some rendering will take, but other cases like video decoder are somewhat more predictable.. the fence provider could predict given the remaining time until the deadline what clk rates are required to get you there. BR, -R > > Otherwise I really like this, I think it's about the only real reason i915 > isn't using atomic helpers. > > Also adding Matt B for this topic. > -Daniel > > > + > > dma_fence_put(new_plane_state->fence); > > new_plane_state->fence = NULL; > > } > > -- > > 2.30.2 > > > > -- > Daniel Vetter > Software Engineer, Intel Corporation > http://blog.ffwll.ch