Received: by 2002:a05:6358:c692:b0:131:369:b2a3 with SMTP id fe18csp3894099rwb; Sun, 30 Jul 2023 19:24:37 -0700 (PDT) X-Google-Smtp-Source: APBJJlHEFDKppSvHeio3/GaepZzAJN8Yd15qm0AqwP+1akAmMRossiP4RxOvIkOqw5J3UQLoHe2n X-Received: by 2002:a17:906:7a59:b0:991:fef4:bb9 with SMTP id i25-20020a1709067a5900b00991fef40bb9mr5160623ejo.58.1690770277059; Sun, 30 Jul 2023 19:24:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690770277; cv=none; d=google.com; s=arc-20160816; b=qrs6KySK79CLIC4WH6k0SaWSIpNOVD5AC46t3PT0gE05w86fRPN+wKxqdyQz9x/shV MkCXClghTJiskWKTTmlDZEQOkRo0AeozP1dT6A7+Y9+x/iXBG8RbjkihqV7+QSJH+cYf 9pIN/ChWIG+37XAyRRjK5nRwOIYcfyKz2eEZK7jjCVMBoEQMEkL3mE0RNpv7Zz01v6uD aaXB8N5YbnLRZ+5jhqW1ux1NIRyo9W+/1zeE5c7xxLdSknAIjSvgTge92ppS7cO6ceKi 9AWQAUlqnOxql67CEkSupu6YGS3p1vrkYIMOBV/37FkQt6yk4XAkD7Vls1GRu2WpKpKi n5LA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to :content-language:references:cc:to:subject:from:user-agent :mime-version:date:message-id:dkim-signature; bh=moHci8shG8kLdpyJfiqGNs2yvu+A/oWWcGTVvGHpmA4=; fh=qSbtd/CRj6ym2ZSfgMCS4nmwNw7+YGsrJV3fC2/66vU=; b=FFkUM4XSf1830Gl1NQwLedPuLOm2pr2zpkiCXwugRA0M0OVSH9FGZ2R9YPdZzUy7QJ 6osOyh/+D3I6VbsMML6sewPeuO/0ccGJzJGj5Lzd7/gSieBm1joDYLNgJ1d0BppXq56v vtuyIe2AFigLEtQkJzY0oTBbC76+F8BIbbkYc/G1Vx2bzUS7mBJZM1uz455n6ChLVVxq n84g2O2zHG3pt9xEcF4U9xsw6gZLRmcQy9wLecaGSbMTSvibea3LJBlYdRdKfCV6G/Bs 7UiqHP9l2AArj9T6HHnKqvUA+lO9oP+4bFJXsSHRAfpAEIWVkx6zrml14/0h1MF3LliL Ohxw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=nQIpReVU; 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k22-20020a17090627d600b00991f4e7f49asi6264292ejc.215.2023.07.30.19.24.13; Sun, 30 Jul 2023 19:24:37 -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=nQIpReVU; 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 S229741AbjGaCBR (ORCPT + 99 others); Sun, 30 Jul 2023 22:01:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54344 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229469AbjGaCBP (ORCPT ); Sun, 30 Jul 2023 22:01:15 -0400 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DCE2FD7 for ; Sun, 30 Jul 2023 19:01:11 -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:In-Reply-To:References: Cc:To:Subject:From:MIME-Version:Date:Message-ID: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=moHci8shG8kLdpyJfiqGNs2yvu+A/oWWcGTVvGHpmA4=; b=nQIpReVUxiINcewGH84N2iwpId r46e73TugbymzBRbIHjbc9MqR5HIlvzTnhTx0PH/sbA/5lHnTer0SCRRwvziEJbxLWIRA1umtak3S XYq5KRKWy3shNO6WTjhX1HlUUI4uFiFm1y5XskQDSQ/sqr9tpafvQ/PN7/YjZEDGg60Red+TuYDeU vjQHqgZcOwtc6rgdXcGmdNCawpyfknlu7SEhHfAV22oRgVSVv3cI7RwjJSjttq3T5S5co4tBJU/vV V2l9blN27TZ69ONHgKyU2H+tRMj9IfptbcVrjqqOymyALNSOrYUlAz+j+O17Hd1YQK4DpqCEsQEdE A6LyywVw==; Received: from [191.193.131.122] (helo=[192.168.1.111]) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_128_GCM:128) (Exim) id 1qQIDW-0072kP-Cy; Mon, 31 Jul 2023 04:01:02 +0200 Message-ID: <35a8e502-c36c-e67e-29ba-a20ae6134c6d@igalia.com> Date: Sun, 30 Jul 2023 23:00:56 -0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: =?UTF-8?Q?Andr=C3=A9_Almeida?= Subject: Re: [PATCH v5 6/6] drm/doc: Define KMS atomic state set To: Pekka Paalanen Cc: Daniel Vetter , dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, wayland-devel@lists.freedesktop.org, kernel-dev@igalia.com, alexander.deucher@amd.com, christian.koenig@amd.com, pierre-eric.pelloux-prayer@amd.com, Simon Ser , Rob Clark , Daniel Stone , =?UTF-8?B?J01hcmVrIE9sxaHDoWsn?= , Dave Airlie , =?UTF-8?Q?Michel_D=C3=A4nzer?= , Randy Dunlap , hwentlan@amd.com, joshua@froggi.es, ville.syrjala@linux.intel.com References: <20230707224059.305474-1-andrealmeid@igalia.com> <20230707224059.305474-7-andrealmeid@igalia.com> <20230713105142.122a0cc1@eldfell> Content-Language: en-US In-Reply-To: <20230713105142.122a0cc1@eldfell> Content-Type: text/plain; charset=UTF-8; format=flowed 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,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE 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: X-Mailing-List: linux-kernel@vger.kernel.org Em 13/07/2023 04:51, Pekka Paalanen escreveu: > On Tue, 11 Jul 2023 10:57:57 +0200 > Daniel Vetter wrote: > >> On Fri, Jul 07, 2023 at 07:40:59PM -0300, André Almeida wrote: >>> From: Pekka Paalanen >>> >>> Specify how the atomic state is maintained between userspace and >>> kernel, plus the special case for async flips. >>> >>> Signed-off-by: Pekka Paalanen >>> Signed-off-by: André Almeida >>> --- >>> v4: total rework by Pekka >>> --- >>> Documentation/gpu/drm-uapi.rst | 41 ++++++++++++++++++++++++++++++++++ >>> 1 file changed, 41 insertions(+) >>> >>> diff --git a/Documentation/gpu/drm-uapi.rst b/Documentation/gpu/drm-uapi.rst >>> index 65fb3036a580..6a1662c08901 100644 >>> --- a/Documentation/gpu/drm-uapi.rst >>> +++ b/Documentation/gpu/drm-uapi.rst >>> @@ -486,3 +486,44 @@ and the CRTC index is its position in this array. >>> >>> .. kernel-doc:: include/uapi/drm/drm_mode.h >>> :internal: >>> + >>> +KMS atomic state >>> +================ >>> + >>> +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. >> >> Small clarification: The kernel indeed tries very hard to make redundant >> changes a no-op, and I think we should consider any issues here bugs. But >> it still has to check, which means it needs to acquire the right locks and >> put in the right (cross-crtc) synchronization points, and due to >> implmentation challenges it's very hard to try to avoid that in all cases. >> So adding redundant changes especially across crtc (and their connected >> planes/connectors) might result in some oversynchronization issues, and >> userspace should therefore avoid them if feasible. >> >> With some sentences added to clarify this: >> >> Reviewed-by: Daniel Vetter > > After talking on IRC yesterday, we realized that the no-op rule is > nowhere near as generic as I have believed. Roughly: > https://oftc.irclog.whitequark.org/dri-devel/2023-07-12#1689152446-1689157291; > > How about: 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 try to avoid no-operation changes, so it is safe for userspace to send redundant property settings. However, the kernel can not assure that every redundant information will always result in a no-op, giving the need to take locks to check par of the state. Giving that, some redundant information can lead to a full damage path. This is not something bad by itself, but userspace need to be aware of that side effect. > Thanks, > pq > >>> + >>> +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 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. >>> -- >>> 2.41.0 >>> >> >