From: Boqun Feng <boqun@kernel.org>
To: Andreas Hindborg <a.hindborg@kernel.org>
Cc: "Gary Guo" <gary@garyguo.net>,
"Alice Ryhl" <aliceryhl@google.com>,
"Lorenzo Stoakes" <lorenzo.stoakes@oracle.com>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
linux-mm@kvack.org, rust-for-linux@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] rust: page: add volatile memory copy methods
Date: Mon, 2 Feb 2026 17:07:57 -0800 [thread overview]
Message-ID: <aYFKbWfQmTInYy91@tardis.local> (raw)
In-Reply-To: <878qddqxjy.fsf@t14s.mail-host-address-is-not-set>
On Sat, Jan 31, 2026 at 10:31:13PM +0100, Andreas Hindborg wrote:
[...]
> >>>>
> >>>> For __user memory, because kernel is only given a userspace address, and
> >>>> userspace can lie or unmap the address while kernel accessing it,
> >>>> copy_{from,to}_user() is needed to handle page faults.
> >>>
> >>> Just to clarify, for my use case, the page is already mapped to kernel
> >>> space, and it is guaranteed to be mapped for the duration of the call
> >>> where I do the copy. Also, it _may_ be a user page, but it might not
> >>> always be the case.
> >>
> >> In that case you should also assume there might be other kernel-space users.
> >> Byte-wise atomic memcpy would be best tool.
> >
> > Other concurrent kernel readers/writers would be a kernel bug in my use
> > case. We could add this to the safety requirements.
> >
>
> Actually, one case just crossed my mind. I think nothing will prevent a
> user space process from concurrently submitting multiple reads to the
> same user page. It would not make sense, but it can be done.
>
> If the reads are issued to different null block devices, the null block
> driver might concurrently write the user page when servicing each IO
> request concurrently.
>
> The same situation would happen in real block device drivers, except the
> writes would be done by dma engines rather than kernel threads.
>
Then we better use byte-wise atomic memcpy, and I think for all the
architectures that Linux kernel support, memcpy() is in fact byte-wise
atomic if it's volatile. Because down the actual instructions, either a
byte-size read/write is used, or a larger-size read/write is used but
they are guaranteed to be byte-wise atomic even for unaligned read or
write. So "volatile memcpy" and "volatile byte-wise atomic memcpy" have
the same implementation.
(The C++ paper [1] also says: "In fact, we expect that existing assembly
memcpy implementations will suffice when suffixed with the required
fence.")
So to make thing move forward, do you mind to introduce a
`atomic_per_byte_memcpy()` in rust::sync::atomic based on
bindings::memcpy(), and cc linux-arch and all the archs that support
Rust for some confirmation? Thanks!
[1]: https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1478r5.html
Regards,
Boqun
>
> Best regards,
> Andreas Hindborg
>
>
next prev parent reply other threads:[~2026-02-03 1:08 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-30 12:33 [PATCH] rust: page: add volatile memory copy methods Andreas Hindborg
2026-01-30 13:10 ` Gary Guo
2026-01-30 13:48 ` Andreas Hindborg
2026-01-30 14:14 ` Gary Guo
2026-01-30 14:42 ` Andreas Hindborg
2026-01-30 15:04 ` Gary Guo
2026-01-30 15:23 ` Andreas Hindborg
2026-01-30 15:48 ` Gary Guo
2026-01-30 16:20 ` Andreas Hindborg
2026-01-30 21:41 ` Boqun Feng
2026-01-31 7:22 ` Boqun Feng
2026-01-31 13:34 ` Andreas Hindborg
2026-01-31 16:09 ` Gary Guo
2026-01-31 20:30 ` Andreas Hindborg
2026-01-31 20:48 ` Gary Guo
2026-01-31 21:31 ` Andreas Hindborg
2026-02-03 1:07 ` Boqun Feng [this message]
2026-02-04 13:16 ` Andreas Hindborg
2026-02-04 13:48 ` Alice Ryhl
2026-02-04 15:58 ` Andreas Hindborg
2026-02-04 16:12 ` Gary Guo
2026-02-12 14:21 ` Andreas Hindborg
2026-01-31 16:26 ` Boqun Feng
2026-01-31 20:14 ` Andreas Hindborg
2026-01-31 13:19 ` Andreas Hindborg
2026-01-31 16:43 ` Boqun Feng
2026-01-31 19:10 ` Andreas Hindborg
2026-01-31 19:30 ` Boqun Feng
2026-01-31 20:20 ` Andreas Hindborg
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=aYFKbWfQmTInYy91@tardis.local \
--to=boqun@kernel.org \
--cc=Liam.Howlett@oracle.com \
--cc=a.hindborg@kernel.org \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=gary@garyguo.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=lossin@kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tmgross@umich.edu \
/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.