All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Eliot Courtney" <ecourtney@nvidia.com>
To: "Alexandre Courbot" <acourbot@nvidia.com>, <sashiko-bot@kernel.org>
Cc: <sashiko-reviews@lists.linux.dev>,
	"John Hubbard" <jhubbard@nvidia.com>,
	"Danilo Krummrich" <dakr@kernel.org>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"David Airlie" <airlied@gmail.com>,
	"Simona Vetter" <simona@ffwll.ch>,
	"Benno Lossin" <lossin@kernel.org>, "Gary Guo" <gary@garyguo.net>,
	"Alistair Popple" <apopple@nvidia.com>,
	"Timur Tabi" <ttabi@nvidia.com>,
	"Eliot Courtney" <ecourtney@nvidia.com>,
	"Zhi Wang" <zhiw@nvidia.com>, <nova-gpu@lists.linux.dev>,
	<dri-devel@lists.freedesktop.org>, <ojeda@kernel.org>,
	"dri-devel" <dri-devel-bounces@lists.freedesktop.org>
Subject: Re: [PATCH v5 11/14] gpu: nova-core: gsp: cmdq: use consume_element to implement drain
Date: Wed, 21 Oct 2026 11:57:57 +0900	[thread overview]
Message-ID: <DMA6GSC7REE4.1OL8XYR8JKJ3C@nvidia.com> (raw)
In-Reply-To: <DM9QI47QSJ0L.2QMRVD4AP5WIV@nvidia.com>

On Tue Oct 20, 2026 at 11:27 PM JST, Alexandre Courbot wrote:
> On Tue Oct 20, 2026 at 7:18 PM JST, sashiko-bot wrote:

[...]

>> In rust/kernel/io/poll.rs:read_poll_timeout(), when the condition is
>> false, the timeout check uses a strict greater-than comparison:
>>
>>         if start.elapsed() > timeout_delta {
>>             // Unlike the C version, we immediately return.
>>             // We have just called `op()` so we don't need to call it again.
>>             return Err(ETIMEDOUT);
>>         }
>>
>>         if !sleep_delta.is_zero() {
>>             fsleep(sleep_delta);
>>         }
>>
>> Because op() only reads two u32 indices from coherent memory in RAM, if
>> the monotonic clock has not advanced by at least 1 ns between
>> Instant::now() and start.elapsed() (for instance on architectures with
>> coarser timer resolution or under virtualization), start.elapsed() is
>> Delta::ZERO. Since Delta::ZERO > Delta::ZERO is false,
>> read_poll_timeout() falls through to fsleep(Delta::from_millis(1)) while
>> holding the Cmdq mutex (in paths like GspInterrupt::handle_threaded() ->
>> Cmdq::drain() and Gpu::new() -> Cmdq::drain()).
>>
>> Would it make sense to keep the while
>> !self.gsp_mem.driver_read_area().0.is_empty() loop condition around
>> self.consume_element(Delta::ZERO, |message| message.log(self.dev))?
>
> Mmm, that's an interesting one, in that I am not sure there are any
> concrete implications but I'd like to fix it anyway.
>
> I was thinking that maybe we should add a special-case to
> `read_poll_timeout` so it returns unconditionally after checking the
> condition once if `timeout_delta == Delta::ZERO`, but doing so would
> make the `sleep_delta` argument moot so I guess that's not adequate (and
> the current behavior is technically correct). So I think I'll
> special-case nova-core's `wait_for_msg` instead.

Personally I don't mind the special case in `read_poll_timeout`.
If you say, I want the timeout to be zero and then it sleeps, that
sounds like wonky behaviour to me. I think it feels weird to have
this special case w.r.t. `sleep_delta` only because we are using
constant values and that's a common use case. TBH I think it would
even be fine to change `start.elapsed() > timeout_delta` to
`start.elapsed() >= timeout_delta`, then it's not even really a
special case. I could try sending a patch for this.

I'm also fine with special casing `wait_for_msg`, but personally
(maybe) sleeping when you set timeout to Delta::ZERO sounds busted to
me.

  reply	other threads:[~2026-10-21  2:58 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-20 10:08 [PATCH v5 00/14] gpu: nova-core: gsp: prepare the command queue for r000 dual-message types Alexandre Courbot
2026-10-20 10:08 ` [PATCH v5 01/14] gpu: nova-core: gsp: cmdq: remove stale comment Alexandre Courbot
2026-10-20 11:43   ` Eliot Courtney
2026-10-20 10:08 ` [PATCH v5 02/14] gpu: nova-core: gsp: cmdq: simplify framing error description Alexandre Courbot
2026-10-20 11:43   ` Eliot Courtney
2026-10-20 10:08 ` [PATCH v5 03/14] gpu: nova-core: gsp: cmdq: validate checksum earlier on receive Alexandre Courbot
2026-10-20 10:08 ` [PATCH v5 04/14] gpu: nova-core: gsp: introduce and use proper RpcMessageHeader type Alexandre Courbot
2026-10-20 10:08 ` [PATCH v5 05/14] gpu: nova-core: gsp: cmdq: group the RPC-specific part of send_single_command Alexandre Courbot
2026-10-20 10:08 ` [PATCH v5 06/14] gpu: nova-core: gsp: cmdq: split the transport part of the send path Alexandre Courbot
2026-10-20 10:08 ` [PATCH v5 07/14] gpu: nova-core: gsp: cmdq: split RPC parsing part of the receive path Alexandre Courbot
2026-10-20 10:08 ` [PATCH v5 08/14] gpu: nova-core: gsp: cmdq: move RPC message logging to RpcMessage Alexandre Courbot
2026-10-20 10:08 ` [PATCH v5 09/14] gpu: nova-core: gsp: cmdq: split the transport part of the receive path Alexandre Courbot
2026-10-21  1:56   ` Eliot Courtney
2026-10-20 10:08 ` [PATCH v5 10/14] gpu: nova-core: gsp: cmdq: extract await_msg_with from await_msg Alexandre Courbot
2026-10-21  2:00   ` Eliot Courtney
2026-10-20 10:08 ` [PATCH v5 11/14] gpu: nova-core: gsp: cmdq: use consume_element to implement drain Alexandre Courbot
2026-10-20 10:18   ` sashiko-bot
2026-10-20 14:27     ` Alexandre Courbot
2026-10-21  2:57       ` Eliot Courtney [this message]
2026-10-21  3:12         ` John Hubbard
2026-10-21  3:23           ` Eliot Courtney
2026-10-21  4:05             ` John Hubbard
2026-10-21  2:58   ` Eliot Courtney
2026-10-20 10:08 ` [PATCH v5 12/14] gpu: nova-core: gsp: cmdq: move the RPC code into a sub-module Alexandre Courbot
2026-10-20 10:15   ` sashiko-bot
2026-10-20 10:08 ` [PATCH v5 13/14] gpu: nova-core: gsp: move the RPC commands " Alexandre Courbot
2026-10-20 10:08 ` [PATCH v5 14/14] gpu: nova-core: gsp: add `rpc` to RPC message send/receive methods Alexandre Courbot

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=DMA6GSC7REE4.1OL8XYR8JKJ3C@nvidia.com \
    --to=ecourtney@nvidia.com \
    --cc=acourbot@nvidia.com \
    --cc=airlied@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=apopple@nvidia.com \
    --cc=dakr@kernel.org \
    --cc=dri-devel-bounces@lists.freedesktop.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gary@garyguo.net \
    --cc=jhubbard@nvidia.com \
    --cc=lossin@kernel.org \
    --cc=nova-gpu@lists.linux.dev \
    --cc=ojeda@kernel.org \
    --cc=sashiko-bot@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=simona@ffwll.ch \
    --cc=ttabi@nvidia.com \
    --cc=zhiw@nvidia.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.