mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Daniel Almeida <daniel.almeida@collabora.com>
To: FUJITA Tomonori <fujita.tomonori@gmail.com>
Cc: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org,
	netdev@vger.kernel.org, andrew@lunn.ch, hkallweit1@gmail.com,
	tmgross@umich.edu, ojeda@kernel.org, alex.gaynor@gmail.com,
	gary@garyguo.net, bjorn3_gh@protonmail.com,
	benno.lossin@proton.me, a.hindborg@samsung.com,
	aliceryhl@google.com, anna-maria@linutronix.de,
	frederic@kernel.org, tglx@linutronix.de, arnd@arndb.de,
	jstultz@google.com, sboyd@kernel.org, mingo@redhat.com,
	peterz@infradead.org, juri.lelli@redhat.com,
	vincent.guittot@linaro.org, dietmar.eggemann@arm.com,
	rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de,
	vschneid@redhat.com, tgunders@redhat.com, me@kloenk.dev
Subject: Re: [PATCH v10 7/8] rust: Add read_poll_timeout functions
Date: Sun, 16 Feb 2025 09:19:02 -0300	[thread overview]
Message-ID: <CEF87294-8580-4C84-BEA3-EB72E63ED7DF@collabora.com> (raw)
In-Reply-To: <20250214.131330.2062210935756508516.fujita.tomonori@gmail.com>

Sorry, ended up replying privately by mistake, resending with everybody else on cc:

——————


> On 14 Feb 2025, at 01:13, FUJITA Tomonori <fujita.tomonori@gmail.com> wrote:
> 
> On Fri, 7 Feb 2025 22:50:37 -0300
> Daniel Almeida <daniel.almeida@collabora.com> wrote:
> 
>>> +/// Polls periodically until a condition is met or a timeout is reached.
>>> +///
>>> +/// ```rust
>>> +/// use kernel::io::poll::read_poll_timeout;
>>> +/// use kernel::time::Delta;
>>> +/// use kernel::sync::{SpinLock, new_spinlock};
>>> +///
>>> +/// let lock = KBox::pin_init(new_spinlock!(()), kernel::alloc::flags::GFP_KERNEL)?;
>>> +/// let g = lock.lock();
>>> +/// read_poll_timeout(|| Ok(()), |()| true, Delta::from_micros(42), Some(Delta::from_micros(42)));
>>> +/// drop(g);
>>> +///
>>> +/// # Ok::<(), Error>(())
>> 
>> IMHO, the example section here needs to be improved.
> 
> Do you have any specific ideas?
> 
> Generally, this function is used to wait for the hardware to be
> ready. So I can't think of a nice example.

Just pretend that you’re polling some mmio address that indicates whether some hardware
block is ready, for example.

You can use “ignore” if you want, the example just has to illustrate how this function works, really.

Something like

```ignore
 /* R is a fictional type that abstracts a memory-mapped register where `read()` returns Result<u32> */
 fn wait_for_hardware(ready_register: R) {
     let op = || ready_register.read()?

     // `READY` is some device-specific constant that we are waiting for.
     let cond =  |value: &u32| { *value == READY }

     let res = io::poll::read_poll_timeout (/* fill this with the right arguments */);

     /* show how `res` works, is -ETIMEDOUT returned on Err? */

     match res {
       Ok(<what is here?>) => { /* hardware is ready */}
       Err(e) => { /* explain that *value != READY here? */ }

     /* sleep is Option<Delta>, how does this work? i.e.: show both None, and Some(…) with some comments. */
 } 
```

That’s just a rough draft, but I think it's going to be helpful for users.

— Daniel

  reply	other threads:[~2025-02-16 12:20 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-07 13:26 [PATCH v10 0/8] rust: Add IO polling FUJITA Tomonori
2025-02-07 13:26 ` [PATCH v10 1/8] sched/core: Add __might_sleep_precision() FUJITA Tomonori
2025-02-07 18:12   ` David Laight
2025-02-08  3:01     ` FUJITA Tomonori
2025-02-10  9:41       ` Alice Ryhl
2025-02-17  1:51         ` Boqun Feng
2025-02-17  6:44           ` FUJITA Tomonori
2025-02-07 13:26 ` [PATCH v10 2/8] rust: time: Add PartialEq/Eq/PartialOrd/Ord trait to Ktime FUJITA Tomonori
2025-02-07 13:26 ` [PATCH v10 3/8] rust: time: Introduce Delta type FUJITA Tomonori
2025-02-07 13:26 ` [PATCH v10 4/8] rust: time: Introduce Instant type FUJITA Tomonori
2025-02-07 13:26 ` [PATCH v10 5/8] rust: time: Add wrapper for fsleep() function FUJITA Tomonori
2025-02-07 13:26 ` [PATCH v10 6/8] MAINTAINERS: rust: Add TIMEKEEPING and TIMER abstractions FUJITA Tomonori
2025-02-17  0:10   ` FUJITA Tomonori
2025-02-17 13:39     ` Frederic Weisbecker
2025-02-19  6:26       ` FUJITA Tomonori
2025-02-07 13:26 ` [PATCH v10 7/8] rust: Add read_poll_timeout functions FUJITA Tomonori
2025-02-08  1:50   ` Daniel Almeida
2025-02-14  4:13     ` FUJITA Tomonori
2025-02-16 12:19       ` Daniel Almeida [this message]
2025-02-16 22:50         ` FUJITA Tomonori
2025-02-09 16:20   ` Gary Guo
2025-02-14  4:05     ` FUJITA Tomonori
2025-02-14 11:37       ` Gary Guo
2025-02-15  9:48         ` FUJITA Tomonori
2025-02-07 13:26 ` [PATCH v10 8/8] net: phy: qt2025: Wait until PHY becomes ready FUJITA Tomonori
2025-02-15 21:28 ` [PATCH v10 0/8] rust: Add IO polling Daniel Almeida
2025-02-16  6:35   ` FUJITA Tomonori

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=CEF87294-8580-4C84-BEA3-EB72E63ED7DF@collabora.com \
    --to=daniel.almeida@collabora.com \
    --cc=a.hindborg@samsung.com \
    --cc=alex.gaynor@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=andrew@lunn.ch \
    --cc=anna-maria@linutronix.de \
    --cc=arnd@arndb.de \
    --cc=benno.lossin@proton.me \
    --cc=bjorn3_gh@protonmail.com \
    --cc=bsegall@google.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=frederic@kernel.org \
    --cc=fujita.tomonori@gmail.com \
    --cc=gary@garyguo.net \
    --cc=hkallweit1@gmail.com \
    --cc=jstultz@google.com \
    --cc=juri.lelli@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=me@kloenk.dev \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=ojeda@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=sboyd@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=tgunders@redhat.com \
    --cc=tmgross@umich.edu \
    --cc=vincent.guittot@linaro.org \
    --cc=vschneid@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®