From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: "André Almeida" <andrealmeid@igalia.com>
Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
"Maxime Ripard" <mripard@kernel.org>,
"Jonathan Corbet" <corbet@lwn.net>,
"Pekka Paalanen" <pekka.paalanen@collabora.com>,
"'Marek Olšák'" <maraeo@gmail.com>,
"Michel Dänzer" <michel.daenzer@mailbox.org>,
"Randy Dunlap" <rdunlap@infradead.org>,
linux-doc@vger.kernel.org, "Pekka Paalanen" <ppaalanen@gmail.com>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
kernel-dev@igalia.com, alexander.deucher@amd.com,
christian.koenig@amd.com
Subject: Re: [PATCH] drm/doc: Define KMS atomic state set
Date: Fri, 1 Dec 2023 17:00:32 +0200 [thread overview]
Message-ID: <ZWn1EC04wBSN9hu2@intel.com> (raw)
In-Reply-To: <20231130200740.53454-1-andrealmeid@igalia.com>
On Thu, Nov 30, 2023 at 05:07:40PM -0300, André Almeida wrote:
> From: Pekka Paalanen <pekka.paalanen@collabora.com>
>
> Specify how the atomic state is maintained between userspace and
> kernel, plus the special case for async flips.
>
> Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
> Signed-off-by: André Almeida <andrealmeid@igalia.com>
> ---
>
> This is a standalone patch from the following serie, the other patches are
> already merged:
> https://lore.kernel.org/lkml/20231122161941.320564-1-andrealmeid@igalia.com/
>
> Documentation/gpu/drm-uapi.rst | 47 ++++++++++++++++++++++++++++++++++
> 1 file changed, 47 insertions(+)
>
> diff --git a/Documentation/gpu/drm-uapi.rst b/Documentation/gpu/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
>
> Please see Documentation/userspace-api/dma-buf-alloc-exchange.rst for
> information on how dma-buf is integrated and exposed within DRM.
> +
> +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 try to avoid
> +no-operation changes,
Not how things work. The driver may try to avoid some really
expensive operations, but generally it will just blindly blast
the full state to the hardware.
IIRC this was discussed long ago when atomic was being designed
and the general concensus was that the kernel shouldn't generally
do this kind of stuff, and instead we just leave it to userspace
to generate optimal commits.
> so it is safe for userspace to send redundant property
> +settings.
Safe but not optimal. Any object included in the state will cause said
object to be part of the commit, and side effects will also need to be
observed.
So if you add an extra crtc (either directly or indirectly) it will
have a new commit inserted into the queue and thus and any subsequent
commit will either block or be rejected with -EBUSY. Also for directly
added crtcs an event will be emitted once the commit is done.
Any plane added will also need to observe side effects even if the FB
doesn't change, such as invalidating any internal compressed version
of the old FB contents, PSR/DSI command mode/etc. will need to upload
the frame to the display, etc. I suppose we could specify that if no
FB is specified at all then these kind of side effects could be ignored,
but that is certainly not how things are implemented right now.
So for optimal behaviour userspace should be minimizing the commits.
--
Ville Syrjälä
Intel
next prev parent reply other threads:[~2023-12-01 15:00 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-30 20:07 [PATCH] drm/doc: Define KMS atomic state set André Almeida
2023-12-01 1:07 ` Bagas Sanjaya
2023-12-01 8:29 ` Maxime Ripard
2023-12-01 9:06 ` Pekka Paalanen
2023-12-01 9:25 ` Maxime Ripard
2023-12-01 10:06 ` Pekka Paalanen
2023-12-01 13:20 ` Maxime Ripard
2023-12-01 16:03 ` Pekka Paalanen
2023-12-04 9:21 ` Maxime Ripard
2023-12-05 8:35 ` Pekka Paalanen
2023-12-01 9:31 ` Simon Ser
2023-12-01 9:57 ` Pekka Paalanen
2023-12-01 10:25 ` Simon Ser
2023-12-01 15:00 ` Ville Syrjälä [this message]
2023-12-01 16:16 ` Pekka Paalanen
2023-12-01 18:09 ` Ville Syrjälä
2023-12-04 12:20 ` Maxime Ripard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZWn1EC04wBSN9hu2@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=alexander.deucher@amd.com \
--cc=andrealmeid@igalia.com \
--cc=christian.koenig@amd.com \
--cc=corbet@lwn.net \
--cc=dri-devel@lists.freedesktop.org \
--cc=kernel-dev@igalia.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maraeo@gmail.com \
--cc=michel.daenzer@mailbox.org \
--cc=mripard@kernel.org \
--cc=pekka.paalanen@collabora.com \
--cc=ppaalanen@gmail.com \
--cc=rdunlap@infradead.org \
--cc=tzimmermann@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).