qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Zhao Liu <zhao1.liu@intel.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-devel@nongnu.org, "Marc-André Lureau" <marcandre.lureau@redhat.com>
Subject: Re: [PATCH 16/33] rust: split Rust-only "common" crate
Date: Thu, 11 Sep 2025 18:44:03 +0800	[thread overview]
Message-ID: <aMKn89O0lEC9AIPa@intel.com> (raw)
In-Reply-To: <20250908105005.2119297-17-pbonzini@redhat.com>

On Mon, Sep 08, 2025 at 12:49:48PM +0200, Paolo Bonzini wrote:
> Date: Mon,  8 Sep 2025 12:49:48 +0200
> From: Paolo Bonzini <pbonzini@redhat.com>
> Subject: [PATCH 16/33] rust: split Rust-only "common" crate
> X-Mailer: git-send-email 2.51.0
> 
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Link: https://lore.kernel.org/r/20250827104147.717203-6-marcandre.lureau@redhat.com
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  MAINTAINERS                                 |   1 +
>  rust/Cargo.lock                             |  10 +
>  rust/Cargo.toml                             |   1 +
>  rust/common/Cargo.toml                      |  19 ++
>  rust/common/meson.build                     |  34 +++
>  rust/{qemu-api => common}/src/assertions.rs |  16 +-
>  rust/{qemu-api => common}/src/bitops.rs     |   1 -
>  rust/{qemu-api => common}/src/callbacks.rs  |  10 +-
>  rust/{qemu-api => common}/src/errno.rs      |   8 +-
>  rust/common/src/lib.rs                      |  20 ++
>  rust/common/src/opaque.rs                   | 238 ++++++++++++++++++++
>  rust/{qemu-api => common}/src/uninit.rs     |   2 +-
>  rust/common/src/zeroable.rs                 |  18 ++
>  rust/hw/char/pl011/Cargo.toml               |   1 +
>  rust/hw/char/pl011/meson.build              |   3 +-
>  rust/hw/char/pl011/src/device.rs            |   3 +-
>  rust/hw/timer/hpet/Cargo.toml               |   1 +
>  rust/hw/timer/hpet/meson.build              |   3 +-
>  rust/hw/timer/hpet/src/device.rs            |   2 +-
>  rust/hw/timer/hpet/src/fw_cfg.rs            |   3 +-
>  rust/meson.build                            |   1 +
>  rust/qemu-api-macros/src/lib.rs             |  16 +-
>  rust/qemu-api-macros/src/tests.rs           |   6 +-
>  rust/qemu-api/Cargo.toml                    |   1 +
>  rust/qemu-api/meson.build                   |  14 +-
>  rust/qemu-api/src/bindings.rs               |  21 ++
>  rust/qemu-api/src/cell.rs                   | 235 +------------------
>  rust/qemu-api/src/chardev.rs                |   5 +-
>  rust/qemu-api/src/error.rs                  |   3 +-
>  rust/qemu-api/src/irq.rs                    |   3 +-
>  rust/qemu-api/src/lib.rs                    |   6 -
>  rust/qemu-api/src/log.rs                    |   4 +-
>  rust/qemu-api/src/memory.rs                 |   5 +-
>  rust/qemu-api/src/prelude.rs                |   6 +-
>  rust/qemu-api/src/qdev.rs                   |  10 +-
>  rust/qemu-api/src/qom.rs                    |   3 +-
>  rust/qemu-api/src/sysbus.rs                 |   3 +-
>  rust/qemu-api/src/timer.rs                  |   8 +-
>  rust/qemu-api/src/vmstate.rs                |  23 +-
>  rust/qemu-api/src/zeroable.rs               |  37 ---
>  rust/qemu-api/tests/vmstate_tests.rs        |   3 +-
>  41 files changed, 448 insertions(+), 359 deletions(-)
>  create mode 100644 rust/common/Cargo.toml
>  create mode 100644 rust/common/meson.build
>  rename rust/{qemu-api => common}/src/assertions.rs (92%)
>  rename rust/{qemu-api => common}/src/bitops.rs (98%)
>  rename rust/{qemu-api => common}/src/callbacks.rs (97%)
>  rename rust/{qemu-api => common}/src/errno.rs (98%)
>  create mode 100644 rust/common/src/lib.rs
>  create mode 100644 rust/common/src/opaque.rs
>  rename rust/{qemu-api => common}/src/uninit.rs (98%)
>  create mode 100644 rust/common/src/zeroable.rs
>  delete mode 100644 rust/qemu-api/src/zeroable.rs

...

> +/// Stores an opaque value that is shared with C code.
> +///
> +/// Often, C structs can changed when calling a C function even if they are

nit typo (found in kvm forum :) ): s/can changed/can be changed/

> +/// behind a shared Rust reference, or they can be initialized lazily and have
> +/// invalid bit patterns (e.g. `3` for a [`bool`]).  This goes against Rust's
> +/// strict aliasing rules, which normally prevent mutation through shared
> +/// references.
> +///
> +/// Wrapping the struct with `Opaque<T>` ensures that the Rust compiler does not
> +/// assume the usual constraints that Rust structs require, and allows using
> +/// shared references on the Rust side.
> +///
> +/// `Opaque<T>` is `#[repr(transparent)]`, so that it matches the memory layout
> +/// of `T`.
> +#[repr(transparent)]
> +pub struct Opaque<T> {
> +    value: UnsafeCell<MaybeUninit<T>>,
> +    // PhantomPinned also allows multiple references to the `Opaque<T>`, i.e.
> +    // one `&mut Opaque<T>` can coexist with a `&mut T` or any number of `&T`;
> +    // see https://docs.rs/pinned-aliasable/latest/pinned_aliasable/.
> +    _pin: PhantomPinned,
> +}

Reviewed-by: Zhao Liu <zhao1.liu@intel.com>




  reply	other threads:[~2025-09-11 10:22 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-08 10:49 [PATCH 00/33] First Rust update for QEMU 10.2 Paolo Bonzini
2025-09-08 10:49 ` [PATCH 01/33] ci: temporarily remove rust from Debian and Ubuntu Paolo Bonzini
2025-09-11  3:14   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 03/33] meson, cargo: require Rust 1.83.0 Paolo Bonzini
2025-09-11  3:19   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 04/33] rust: add missing const markers for MSRV==1.83.0 Paolo Bonzini
2025-09-11  3:20   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 05/33] rust: use inline const expressions Paolo Bonzini
2025-09-11  6:15   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 06/33] rust: add qdev Device derive macro Paolo Bonzini
2025-09-11  6:58   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 07/33] rust: vmstate: convert to use builder pattern Paolo Bonzini
2025-09-08 10:49 ` [PATCH 08/33] rust: vmstate: use const_refs_to_static Paolo Bonzini
2025-09-11 10:07   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 09/33] rust: qdev: const_refs_to_static Paolo Bonzini
2025-09-11 10:20   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 10/33] docs/rust: update msrv Paolo Bonzini
2025-09-11 10:21   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 11/33] rust: remove unused global qemu "allocator" Paolo Bonzini
2025-09-11 10:21   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 12/33] rust: add workspace authors Paolo Bonzini
2025-09-11 10:23   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 13/33] rust: move vmstate_clock!() to qdev module Paolo Bonzini
2025-09-11 10:25   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 14/33] rust: move VMState handling to QOM module Paolo Bonzini
2025-09-11 10:26   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 15/33] rust: move Cell vmstate impl Paolo Bonzini
2025-09-11 10:31   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 16/33] rust: split Rust-only "common" crate Paolo Bonzini
2025-09-11 10:44   ` Zhao Liu [this message]
2025-09-08 10:49 ` [PATCH 17/33] rust: make build.rs generic over various ./rust/projects Paolo Bonzini
2025-09-12  7:43   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 18/33] rust: split "util" crate Paolo Bonzini
2025-09-12  8:00   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 19/33] rust: split "migration" crate Paolo Bonzini
2025-09-12  8:09   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 20/33] rust: split "bql" crate Paolo Bonzini
2025-09-12  8:31   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 21/33] rust: split "qom" crate Paolo Bonzini
2025-09-08 10:49 ` [PATCH 22/33] rust: split "chardev" crate Paolo Bonzini
2025-09-12  8:35   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 23/33] rust: split "system" crate Paolo Bonzini
2025-09-12  8:38   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 24/33] rust: split "hwcore" crate Paolo Bonzini
2025-09-12  8:41   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 25/33] rust: rename qemu_api_macros -> qemu_macros Paolo Bonzini
2025-09-12  8:41   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 26/33] rust/hpet: drop now unneeded qemu_api dep Paolo Bonzini
2025-09-12  8:42   ` Zhao Liu
2025-09-08 10:49 ` [PATCH 27/33] rust/pl011: drop dependency on qemu_api Paolo Bonzini
2025-09-12  8:45   ` Zhao Liu
2025-09-08 10:50 ` [PATCH 28/33] rust: repurpose qemu_api -> tests Paolo Bonzini
2025-09-12  8:57   ` Zhao Liu
2025-09-08 10:50 ` [PATCH 29/33] rust: re-export qemu_macros internal helper in "bits" Paolo Bonzini
2025-09-12  9:01   ` Zhao Liu
2025-09-08 10:50 ` [PATCH 30/33] rust: re-export qemu macros from common/qom/hwcore Paolo Bonzini
2025-09-12  9:03   ` Zhao Liu
2025-09-08 10:50 ` [PATCH 31/33] docs: update rust.rst Paolo Bonzini
2025-09-12  9:13   ` Zhao Liu
2025-09-08 10:50 ` [PATCH 32/33] rust: meson: remove unnecessary complication in device crates Paolo Bonzini
2025-09-12  9:20   ` Zhao Liu
2025-09-08 10:50 ` [PATCH 33/33] rust: do not inline do_init_io Paolo Bonzini
2025-09-12  9:21   ` Zhao Liu
     [not found] ` <20250908105005.2119297-3-pbonzini@redhat.com>
2025-09-11  3:17   ` [PATCH 02/33] configure: bump Meson to 1.9.0 for use with Rust Zhao Liu
2025-09-11 10:04 ` [PATCH 00/33] First Rust update for QEMU 10.2 Peter Maydell
2025-09-11 11:18   ` Marc-André Lureau
2025-09-12  7:42     ` Zhao Liu
2025-09-12  8:47       ` Marc-André Lureau
2025-09-15 14:27   ` Paolo Bonzini
2025-09-15 17:51     ` Daniel P. Berrangé

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=aMKn89O0lEC9AIPa@intel.com \
    --to=zhao1.liu@intel.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /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).