Received: by 2002:a05:7412:b10a:b0:f3:1519:9f41 with SMTP id az10csp2582395rdb; Mon, 4 Dec 2023 01:21:24 -0800 (PST) X-Google-Smtp-Source: AGHT+IFr8YHXpopMFgw/R+HCssQ9StAR8Ni7SM6I/P5xjMu4FHSIo1TcrMD9LMfVdtOa/0ezqdl+ X-Received: by 2002:a17:903:2649:b0:1d0:6e9e:c96b with SMTP id je9-20020a170903264900b001d06e9ec96bmr2972954plb.35.1701681683503; Mon, 04 Dec 2023 01:21:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701681683; cv=none; d=google.com; s=arc-20160816; b=NbUMsU97obIQk90PALleJUC+7QqW2mKcu9mmwyaBTzL4VQriKOSXp5LrKzplIW29hT 0z16xhtMsDCKGGxaRkA09PhNXsq0f3P/s6rZjQnw+xXk0/kIQtUYqkDo7UozrsL2gfuN RDmOWilM4clId4RZVjHdJtGuPhpOGuSJz+kZq+wTBQeKOSKSw4mNZ/h83Nm6Gwk6TGUL Urle/WOpDrPmqne5qmqzqj64E6nz9xxaG1VwZXV7ar03D/ZREk6FXrYEZxZpupxFODFx xHTKk+cgVP/P8luh4It/O6LwHS/tYDPTN5uKL5vla3Zixg1OHXpl5e1nxKn5LfcGtLHv 8VQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=GvUlJ7d5v6KwkObfE53eILsKhpZt4X3rzZk2P7BW7dM=; fh=9yqccQfJvTlHiVPXFz7PcAcRM/hpvdbzLZqAZKHgl3I=; b=uLA1UiO93STUl2/rpfvnSutApHI7HuXgi92wjC3GzrqQ8bn7oJmKQbUsclzCCYShSU 8dHzFjNgFBSCefMuxqM1EItiQQS2yHp7AeWpYiwkDcae3js94Z+BZAyGlzCM2dhSPaTz JvTexx40f2V8UkXp60+Gs5uqCJdkvIH+zb373tluhLMgVjRU77ruiegRD3FeXUXDepsJ h25B6JBKj3E06b7loD8MmUvDqoJcf1IG8RTRq5KJWfxGINm2hN/b1/5LSwguHAxCIw5M pDjToe4kLBAZUAPro4n94NrXwH0hkkMQRdN7DZcC+Rk2bJIzBCzLNWtqkvK+huKSt0Z2 G6bw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=pFFom18c; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id jg15-20020a17090326cf00b001d07c56fd79si2359597plb.638.2023.12.04.01.21.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Dec 2023 01:21:23 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=pFFom18c; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id CBD798041EDB; Mon, 4 Dec 2023 01:21:19 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230046AbjLDJVD (ORCPT + 99 others); Mon, 4 Dec 2023 04:21:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51786 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229947AbjLDJVB (ORCPT ); Mon, 4 Dec 2023 04:21:01 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 089B9C3 for ; Mon, 4 Dec 2023 01:21:07 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 10923C433C7; Mon, 4 Dec 2023 09:21:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1701681666; bh=yXpkcjxGbH43Y6FCHbcxZVd2NuXjmzJqebGcXpkFse0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=pFFom18cUH0M1doQnz0oAWJZFu1VIBEQNEG7NFnWO95h6h0R2oJ+A29dvAFa2vTHw 2ncfjyxQeUmYudoAMd1kHfTaGNzwV1iloC15leqUDl2AbGlv9lHfhNW9Jju8ciKF42 hhSIxZQtttswqKyv0umz0i8k6AH71cXONhfFSYEkrkfLbaxvZELo38mVwhDQguwi9L I+6xYZFpWSWu+J3Ph2i4Z916kfKsW76Kq1wFVNckusUL1jcfeYb9gJBFejR+mXVmEw 6PX9bkt9RKBUiqLlUwcrm6ztCEOb9ohYC3Ufo9GlfLkTl2XQhZYIH0KT2bFGyvYKKf ShbO4SwT5sJFw== Date: Mon, 4 Dec 2023 10:21:03 +0100 From: Maxime Ripard To: Pekka Paalanen Cc: =?utf-8?B?QW5kcsOp?= Almeida , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel-dev@igalia.com, alexander.deucher@amd.com, christian.koenig@amd.com, Simon Ser , Rob Clark , daniel@ffwll.ch, Daniel Stone , 'Marek =?utf-8?B?T2zFocOhayc=?= , Dave Airlie , Michel =?utf-8?Q?D=C3=A4nzer?= , Randy Dunlap , Jonathan Corbet , linux-doc@vger.kernel.org, Thomas Zimmermann , Maarten Lankhorst Subject: Re: [PATCH] drm/doc: Define KMS atomic state set Message-ID: References: <20231130200740.53454-1-andrealmeid@igalia.com> <20231201110616.30ad1468.pekka.paalanen@collabora.com> <20231201120648.2ba706e1.pekka.paalanen@collabora.com> <20231201180348.4a42025b.pekka.paalanen@collabora.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="7b7zgi2rychuppe7" Content-Disposition: inline In-Reply-To: <20231201180348.4a42025b.pekka.paalanen@collabora.com> X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Mon, 04 Dec 2023 01:21:20 -0800 (PST) --7b7zgi2rychuppe7 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi On Fri, Dec 01, 2023 at 06:03:48PM +0200, Pekka Paalanen wrote: > On Fri, 1 Dec 2023 14:20:55 +0100 > Maxime Ripard wrote: >=20 > > On Fri, Dec 01, 2023 at 12:06:48PM +0200, Pekka Paalanen wrote: > > > On Fri, 1 Dec 2023 10:25:09 +0100 > > > Maxime Ripard wrote: > > > =20 > > > > On Fri, Dec 01, 2023 at 11:06:16AM +0200, Pekka Paalanen wrote: =20 > > > > > On Fri, 1 Dec 2023 09:29:05 +0100 > > > > > Maxime Ripard wrote: > > > > > =20 > > > > > > Hi, > > > > > >=20 > > > > > > On Thu, Nov 30, 2023 at 05:07:40PM -0300, Andr=E9 Almeida wrote= : =20 > > > > > > > From: Pekka Paalanen > > > > > > >=20 > > > > > > > Specify how the atomic state is maintained between userspace = and > > > > > > > kernel, plus the special case for async flips. > > > > > > >=20 > > > > > > > Signed-off-by: Pekka Paalanen > > > > > > > Signed-off-by: Andr=E9 Almeida > > > > > > > --- > > > > > > >=20 > > > > > > > This is a standalone patch from the following serie, the othe= r patches are > > > > > > > already merged: > > > > > > > https://lore.kernel.org/lkml/20231122161941.320564-1-andrealm= eid@igalia.com/ > > > > > > >=20 > > > > > > > Documentation/gpu/drm-uapi.rst | 47 ++++++++++++++++++++++++= ++++++++++ > > > > > > > 1 file changed, 47 insertions(+) > > > > > > >=20 > > > > > > > diff --git a/Documentation/gpu/drm-uapi.rst b/Documentation/g= pu/drm-uapi.rst > > > > > > > index 370d820be248..d0693f902a5c 100644 > > > > > > > --- a/Documentation/gpu/drm-uapi.rst > > > > > > > +++ b/Documentation/gpu/drm-uapi.rst > > > > > > > @@ -570,3 +570,50 @@ dma-buf interoperability > > > > > > > =20 > > > > > > > Please see Documentation/userspace-api/dma-buf-alloc-exchang= e.rst for > > > > > > > information on how dma-buf is integrated and exposed within = DRM. > > > > > > > + > > > > > > > +KMS atomic state > > > > > > > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > > > > + > > > > > > > +An atomic commit can change multiple KMS properties in an at= omic fashion, > > > > > > > +without ever applying intermediate or partial state changes.= Either the whole > > > > > > > +commit succeeds or fails, and it will never be applied parti= ally. 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 stat= e could unexpectedly > > > > > > > +fail, cause visible glitches, or delay reaching the final st= ate. > > > > > > > + > > > > > > > +An atomic commit can be flagged with DRM_MODE_ATOMIC_TEST_ON= LY, which means the > > > > > > > +complete state change is validated but not applied. Userspa= ce 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 ano= ther, perhaps > > > > > > > +simpler, final state. This allows userspace to probe for va= rious configurations > > > > > > > +without causing visible glitches on screen and without the n= eed to undo a > > > > > > > +probing change. > > > > > > > + > > > > > > > +The changes recorded in an atomic commit apply on top the cu= rrent KMS state in > > > > > > > +the kernel. Hence, the complete new KMS state is the complet= e old KMS state with > > > > > > > +the committed property settings done on top. The kernel will= try to avoid =20 > > > > > >=20 > > > > > > That part is pretty confusing to me. > > > > > >=20 > > > > > > What are you calling the current and old KMS state? =20 > > > > >=20 > > > > > Current =3D old, if you read that "current" is the KMS state befo= re > > > > > considering the atomic commit at hand. > > > > > =20 > > > > > > What's confusing to me is that, yes, what you're saying is true= for a > > > > > > given object: if it was part of the commit, the new state is th= e old > > > > > > state + whatever the new state changed. > > > > > >=20 > > > > > > However, if that object wasn't part of the commit at all, then = it's > > > > > > completely out of the old or new global KMS state. =20 > > > > >=20 > > > > > This is not talking about kernel data structures at all. This is > > > > > talking about how KMS looks from the userspace point of view. = =20 > > > >=20 > > > > I mean, that's also true from the userspace point of view. You can = very > > > > well commit only a single property on a single object, and only that > > > > object will be part of the "global KMS state". =20 > > >=20 > > > What is "global KMS state"? =20 > >=20 > > struct drm_atomic_state, ie. the object holding the entire new commit c= ontent. > >=20 > > > As a userspace developer, the global KMS state is the complete, total, > > > hardware and driver instance state. It's not any kind of data > > > structure, but it is all the condition and all the programming of the > > > whole device (hardware + driver instance) at any specific time instan= t. =20 > >=20 > > That was my understanding, and assumption, too. > >=20 > > I think part of the issue is that drm_atomic_state is documented as "the > > global state object for atomic updates" which kind of implies that it > > holds *everything*, except that an atomic update can be partial. >=20 > I haven't read such doc, and I never intended to refer to struct > drm_atomic_state. It very much sounds like it's not what I mean. I > avoid reading kernel internals docs, they are uninteresting to > userspace developers. Sure, but I'd assume (and kind of hope) that kernel devs will read the UAPI docs at some point too :) > Is it really "global" too? Or is it device-wide? Or is it just the bits > that userspace bothered to mention in an atomic commit? As far as I'm concerned, global =3D=3D "device-wide", so I'm not entirely sure what is the distinction you want to raise here, so I might be off. But to answer the latter part of your question, drm_atomic_state contains the changes of all the objects affected by the commit userspace mentioned to bother. Which is is why I found the "global" to be confusing, because it's not a device-wide-global state, it's a commit-global state. > > So maybe we need to rewrite some other parts of the documentation too > > then? >=20 > I guess. >=20 > > Or s/drm_atomic_state/drm_atomic_update/ so we don't have two slightly > > different definitions of what a state is? > >=20 > > Because, yeah, at the moment we have our object state that is the > > actual, entire, state of the device but the global atomic state is a > > collection of object state but isn't the entire state of the device in > > most cases. > >=20 > > If we get rid of the latter, then there's no ambiguity anymore and your > > sentence makes total sense. >=20 > I have no idea of kernel internals. Userspace should not care about > kernel internals as that would mean the kernel internals become UABI. > Some internals leak into UABI anyway as observable behaviour, but it > could be worse. >=20 > The complete device state is a vague, abstract concept. I do not expect > it to be an actual C struct. It is hardware-specific, too. >=20 > > > It is not related to any atomic commit or UAPI call, it is how the > > > hardware is currently programmed. > > >=20 > > > How can we make that clear? > > >=20 > > > Should "KMS state" be replaced with "complete device state" or > > > something similar? =20 > >=20 > > I know I've been bitten by that ambiguity, and the part of the doc I've > > replied too mentions the "KMS state in the kernel" and an atomic commit, > > so it's easy to make the parallel with drm_atomic_state here. > >=20 > > I guess we can make it clearer that it's from the userspace then? >=20 > It's not from userspace. It is a concept from the userspace > perspective. I'm not sure how to make that more clear. >=20 > From userspace perspective it looks like the kernel maintains all of a > device's state. What would you call this "all of a device's state as > maintained by the kernel"? Like I said, I think most of the confusion comes from the kernel doc, not your patch. I'll send a patch to s/drm_atomic_state/drm_atomic_update/, we'll see how it goes. Maxime --7b7zgi2rychuppe7 Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQRcEzekXsqa64kGDp7j7w1vZxhRxQUCZW2Z/wAKCRDj7w1vZxhR xeNaAP9QUgLNyEKndg7DfUpbY579H60NViHRaq5loz77Xipj8wEA1+Bh7n0qkpkY SXPxSCULHzhaZ4LbAAaos1OwXWtZSwM= =H5DF -----END PGP SIGNATURE----- --7b7zgi2rychuppe7--