Message ID | 20230701020917.143394-7-andrealmeid@igalia.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp10789936vqr; Fri, 30 Jun 2023 19:39:13 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5uvrGQyVGEGZQD+m1twk68rbkywFymR/LbWpcDUK87U6gufZtTO0pcqxNJhyRl4nI0faRA X-Received: by 2002:a9d:75ce:0:b0:6b8:19d8:6925 with SMTP id c14-20020a9d75ce000000b006b819d86925mr5189567otl.12.1688179153086; Fri, 30 Jun 2023 19:39:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688179153; cv=none; d=google.com; s=arc-20160816; b=yP3FCijUU4YwHjdb2v3k/VGgMg79afLY0O1rCzETOqAN8S9qRLuBeHap19MACNdHBv Rklmc206WPbQut+vqJB7S7gtW9AH4ixH5tIlLq5d5UBz2ozP9KHxNPcDsxHoZmHc0cIU s8lzz1RhytFo06jJnA0//MUkOFg9G3pwgUFClBoqMSioB5HwOfU5jeNpgTCLcnPXbhGO LTuFrrU3Idtr3PhfTwgwEHwrbhl2/1b1BeIoy5T2qmBanvdrypcU6NkweL17Sus5sutV X62gBIlFtOmBuCci9oD7MyajgOXb85wSyKd57Zikh5/TXsGt2TVqW3etkn3UaYsdEGka +IMw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=FpvV1NRn92NjSFc/aa9HU0kB1fj/LcwCHP8r7t79LKQ=; fh=yJKnCMONMPDb5DcRuNlFPqebkFeNCW1ydpZFk0usg5k=; b=ZvcuEhBRJRhpc74zkZHZ0xq0Ep3lSRIbKyodKIrzTgYQhtCjCLk8WRTvYVTl/A1GXV GLa3Xw2F7REXYsKtD/gXswkq+n121hfffEDWyHk4cKY5d7NGPwQwj5u2WwPcc/jz+Qtg EzWtKIYP5iXF6gtQy4b+GE2wAKH9SwKeqtv/cItsxqMkpOKhJg2DVoQx5PvjgVpOWGTH uGRKIlvzRuTfMbVkMjLga67cYjtX6HO+FDZV+mqDIngoR/8R51WI6WiAUHDEJC/fgYgD v4Es8CR6GRU1ojR/tI9gMBWCHEFtzGphISWHk14V3O0TSrfWXHnBjtCShtODtjiEOROr 5Lqg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=IQwSBaK4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w67-20020a636246000000b0055752f5a119si14075958pgb.517.2023.06.30.19.39.00; Fri, 30 Jun 2023 19:39:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=IQwSBaK4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229506AbjGACKb (ORCPT <rfc822;nicolai.engesland@gmail.com> + 99 others); Fri, 30 Jun 2023 22:10:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39528 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229995AbjGACKS (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Fri, 30 Jun 2023 22:10:18 -0400 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 86F39448B for <linux-kernel@vger.kernel.org>; Fri, 30 Jun 2023 19:09:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=FpvV1NRn92NjSFc/aa9HU0kB1fj/LcwCHP8r7t79LKQ=; b=IQwSBaK4dtvffDRp6/HaKl/E7a HJgIluzVyRfp+1nipl9ZO4ikcNp8vPJyIiK/sZ+AWWQz+fEHLF82HpYZdnE/xq61NQ0xOcAkPXuhj pNuMDYbZBfQX4QF3DdXJRehvlT1FOK1ExMYnBSGJvkYGAeE+wqpoqi7VxqUovfVXj7uiUZRvZ7oj+ HIgVNImcyhMGUOTsesmF9Nc19mBFj+GqABzhb0pwSEHz3Udeit2RPm1/3ygDq4s42EMG4D4FvKMjA KYl6+k6jm1dmt0Z+IHtvyZSQP2YpdRPA/xy2zERwziURYskIVdOjutkBqjj87mWiK5IG4ArTQ9aVz oswa/ALg==; Received: from [187.74.70.209] (helo=steammachine.lan) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1qFQ3g-006abr-5T; Sat, 01 Jul 2023 04:09:56 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= <andrealmeid@igalia.com> To: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, wayland-devel@lists.freedesktop.org Cc: kernel-dev@igalia.com, alexander.deucher@amd.com, christian.koenig@amd.com, pierre-eric.pelloux-prayer@amd.com, Simon Ser <contact@emersion.fr>, Rob Clark <robdclark@gmail.com>, Pekka Paalanen <ppaalanen@gmail.com>, Daniel Vetter <daniel@ffwll.ch>, Daniel Stone <daniel@fooishbar.org>, =?utf-8?b?J01hcmVrIE9sxaHDoWsn?= <maraeo@gmail.com>, Dave Airlie <airlied@gmail.com>, =?utf-8?q?Michel_D=C3=A4nzer?= <michel.daenzer@mailbox.org>, Italo Nicola <italonicola@collabora.com>, Randy Dunlap <rdunlap@infradead.org>, hwentlan@amd.com, joshua@froggi.es, ville.syrjala@linux.intel.com, =?utf-8?q?Andr=C3=A9_Almeida?= <andrealmeid@igalia.com> Subject: [PATCH v4 6/6] drm/doc: Define KMS atomic state set Date: Fri, 30 Jun 2023 23:09:17 -0300 Message-ID: <20230701020917.143394-7-andrealmeid@igalia.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230701020917.143394-1-andrealmeid@igalia.com> References: <20230701020917.143394-1-andrealmeid@igalia.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1770184143562679407?= X-GMAIL-MSGID: =?utf-8?q?1770184143562679407?= |
Series |
drm: Add support for atomic async page-flip
|
|
Commit Message
André Almeida
July 1, 2023, 2:09 a.m. UTC
Specify how the atomic state is maintained between userspace and
kernel, plus the special case for async flips.
Signed-off-by: André Almeida <andrealmeid@igalia.com>
---
v4: new patch
---
Documentation/gpu/drm-uapi.rst | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
Comments
On Fri, 30 Jun 2023 23:09:17 -0300 André Almeida <andrealmeid@igalia.com> wrote: > Specify how the atomic state is maintained between userspace and > kernel, plus the special case for async flips. > > Signed-off-by: André Almeida <andrealmeid@igalia.com> > --- > v4: new patch > --- > Documentation/gpu/drm-uapi.rst | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/Documentation/gpu/drm-uapi.rst b/Documentation/gpu/drm-uapi.rst > index 65fb3036a580..5464376051cc 100644 > --- a/Documentation/gpu/drm-uapi.rst > +++ b/Documentation/gpu/drm-uapi.rst > @@ -486,3 +486,22 @@ and the CRTC index is its position in this array. > > .. kernel-doc:: include/uapi/drm/drm_mode.h > :internal: > + > +KMS atomic state > +================ > + > +If a userspace using the DRM atomic API would like to change the modeset, it s/modeset/video mode/ > +needs to do in an atomic way, changing all desired properties in a single > +commit. This applies any and all state changes, not only video modes. Plane configuration is a good example, where video mode does not change. > Following commits may contain the same properties again, as if they were > +new. The kernel can then judge if those properties requires modesetting and real > +changes, or it's just the same state as before. In summary, userspace commits do > +not need to set the minimal state as possible and can commit redundant > +information, and the kernel will ignore it. Maybe the whole paragraph should be more like... ahem, looks I got a bit carried away in writing this. Please, take what's useful, I'm not sure if any of this has been actually documented before: An atomic commit can change multiple KMS properties in an atomic fashion, without ever applying intermediate or partial state changes. Either the whole commit succeeds or fails, and it will never be applied partially. This is the fundamental improvement of the atomic API over the older non-atomic API which is referred to as the "legacy API". Applying intermediate state could unexpectedly fail, cause visible glitches, or delay reaching the final state. An atomic commit can be flagged with DRM_MODE_ATOMIC_TEST_ONLY, which means the complete state change is validated but not applied. Userspace should use this flag to validate any state change before asking to apply it. If validation fails for any reason, userspace should attempt to fall back to another, perhaps simpler, final state. This allows userspace to probe for various configurations without causing visible glitches on screen and without the need to undo a probing change. The changes recorded in an atomic commit apply on top the current KMS state in the kernel. Hence, the complete new KMS state is the complete old KMS state with the committed property settings done on top. The kernel will automatically avoid no-operation changes, so it is safe and even expected for userspace to send redundant property settings. No-operation changes do not count towards actually needed changes, e.g. setting MODE_ID to a different blob with identical contents as the current KMS state shall not be a modeset on its own. A "modeset" is a change in KMS state that might enable, disable, or temporarily disrupt the emitted video signal, possibly causing visible glitches on screen. A modeset may also take considerably more time to complete than other kinds of changes, and the video sink might also need time to adapt to the new signal properties. Therefore a modeset must be explicitly allowed with the flag DRM_MODE_ATOMIC_ALLOW_MODESET. This in combination with DRM_MODE_ATOMIC_TEST_ONLY allows userspace to determine if a state change is likely to cause visible disruption on screen and avoid such changes when end users do not expect them. > + > +An observation must be made for atomic operations with DRM_MODE_PAGE_FLIP_ASYNC. > +In such scenarios properties values can be sent, but the if they change > +something, the kernel will reject the flip. This is done because property > +changes can lead to modesetting, that would defeat the goal of flipping as fast > +as possible. The only exceptions are the framebuffer ID to be flipped to and > +mode IDs changes, which could be referring to an identical mode, thus not > +requiring modeset. That's a bit... roundabout way to describe it. Doesn't async flip want to prevent all kinds of other-than-FB changes, not only the modesetting ones? Modesets are already gated by ALLOW_MODESET anyway. How about something like: An atomic commit with the flag DRM_MODE_PAGE_FLIP_ASYNC is allowed to effectively change only the FB_ID property on any planes. No-operation changes are ignored as always. Changing any other property will cause the commit to be rejected. If you want to take these and need my Sob, that would be Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com> Thanks, pq
Em 03/07/2023 05:38, Pekka Paalanen escreveu: > On Fri, 30 Jun 2023 23:09:17 -0300 > André Almeida <andrealmeid@igalia.com> wrote: > >> Specify how the atomic state is maintained between userspace and >> kernel, plus the special case for async flips. >> >> Signed-off-by: André Almeida <andrealmeid@igalia.com> [...] > > If you want to take these and need my Sob, that would be > Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com> > > Thank you very much! Your version is way better than mine, I'll use it in my next version. > Thanks, > pq
diff --git a/Documentation/gpu/drm-uapi.rst b/Documentation/gpu/drm-uapi.rst index 65fb3036a580..5464376051cc 100644 --- a/Documentation/gpu/drm-uapi.rst +++ b/Documentation/gpu/drm-uapi.rst @@ -486,3 +486,22 @@ and the CRTC index is its position in this array. .. kernel-doc:: include/uapi/drm/drm_mode.h :internal: + +KMS atomic state +================ + +If a userspace using the DRM atomic API would like to change the modeset, it +needs to do in an atomic way, changing all desired properties in a single +commit. Following commits may contain the same properties again, as if they were +new. The kernel can then judge if those properties requires modesetting and real +changes, or it's just the same state as before. In summary, userspace commits do +not need to set the minimal state as possible and can commit redundant +information, and the kernel will ignore it. + +An observation must be made for atomic operations with DRM_MODE_PAGE_FLIP_ASYNC. +In such scenarios properties values can be sent, but the if they change +something, the kernel will reject the flip. This is done because property +changes can lead to modesetting, that would defeat the goal of flipping as fast +as possible. The only exceptions are the framebuffer ID to be flipped to and +mode IDs changes, which could be referring to an identical mode, thus not +requiring modeset.