[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZyyAsjsz05AlkOBd@pathway.suse.cz>
Date: Thu, 7 Nov 2024 09:56:18 +0100
From: Petr Mladek <pmladek@...e.com>
To: Boqun Feng <boqun.feng@...il.com>
Cc: FUJITA Tomonori <fujita.tomonori@...il.com>, anna-maria@...utronix.de,
frederic@...nel.org, tglx@...utronix.de, jstultz@...gle.com,
sboyd@...nel.org, linux-kernel@...r.kernel.org,
netdev@...r.kernel.org, rust-for-linux@...r.kernel.org,
andrew@...n.ch, hkallweit1@...il.com, tmgross@...ch.edu,
ojeda@...nel.org, alex.gaynor@...il.com, gary@...yguo.net,
bjorn3_gh@...tonmail.com, benno.lossin@...ton.me,
a.hindborg@...sung.com, aliceryhl@...gle.com, arnd@...db.de,
Steven Rostedt <rostedt@...dmis.org>,
Andy Shevchenko <andriy.shevchenko@...ux.intel.com>,
Rasmus Villemoes <linux@...musvillemoes.dk>,
Sergey Senozhatsky <senozhatsky@...omium.org>
Subject: Re: [PATCH v5 6/7] rust: Add read_poll_timeout functions
On Wed 2024-11-06 13:35:09, Boqun Feng wrote:
> On Fri, Nov 01, 2024 at 10:01:20AM +0900, FUJITA Tomonori wrote:
> > Add read_poll_timeout functions which poll periodically until a
> > condition is met or a timeout is reached.
> >
> > C's read_poll_timeout (include/linux/iopoll.h) is a complicated macro
> > and a simple wrapper for Rust doesn't work. So this implements the
> > same functionality in Rust.
> >
> > The C version uses usleep_range() while the Rust version uses
> > fsleep(), which uses the best sleep method so it works with spans that
> > usleep_range() doesn't work nicely with.
> >
> > Unlike the C version, __might_sleep() is used instead of might_sleep()
> > to show proper debug info; the file name and line
> > number. might_resched() could be added to match what the C version
> > does but this function works without it.
> >
> > The sleep_before_read argument isn't supported since there is no user
> > for now. It's rarely used in the C version.
> >
> > For the proper debug info, readx_poll_timeout() and __might_sleep()
> > are implemented as a macro. We could implement them as a normal
> > function if there is a clean way to get a null-terminated string
> > without allocation from core::panic::Location::file().
> >
>
> So printk() actually support printing a string with a precison value,
> that is: a format string "%.*s" would take two inputs, one for the length
> and the other for the pointer to the string, for example you can do:
>
> char *msg = "hello";
>
> printk("%.*s\n", 5, msg);
>
> This is similar to printf() in glibc [1].
>
> If we add another __might_sleep_precision() which accepts a file name
> length:
>
> void __might_sleep_precision(const char *file, int len, int line)
>
> then we don't need to use macro here, I've attached a diff based
> on your whole patchset, and it seems working.
>
> Cc printk folks to if they know any limitation on using precision.
I am not aware of any printk() limitation here. The "%.*s" format
should work the same way as in printf() in the userspace.
Best Regards,
Petr
Powered by blists - more mailing lists