From: Stefan Hajnoczi <stefanha@gmail.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-block@nongnu.org, hreitz@redhat.com, pbonzini@redhat.com,
manos.pitsidianakis@linaro.org, philmd@linaro.org,
qemu-devel@nongnu.org, qemu-rust@nongnu.org
Subject: Re: [PATCH v2 00/11] rust/block: Add minimal block driver bindings
Date: Wed, 5 Mar 2025 18:23:59 +0800 [thread overview]
Message-ID: <20250305102359.GF247800@fedora> (raw)
In-Reply-To: <20250218182019.111467-1-kwolf@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 4395 bytes --]
On Tue, Feb 18, 2025 at 07:20:08PM +0100, Kevin Wolf wrote:
> This series adds minimal bindings for writing block drivers in Rust and
> converts the bochs block driver as an example. Some parts (such as the
> open functions) are still essentially C written in Rust syntax, while
> other parts already try to provide somewhat idiomatic abstractions.
>
> The main purpose of this series is just to add a starting point for
> incremental improvements to the bindings; it's clearly not very polished
> yet and ignores some important points like enforcing the graph lock.
>
> Therefore, the main focus in the immediate future after this series
> should be cleaning up the bochs driver and the bindings it uses rather
> than adding more drivers.
>
> Based-on: <20250213143216.3910163-1-pbonzini@redhat.com>
Hi Kevin,
This is very cool: both the ability to write block drivers in Rust and
the new API design focussing on mappings instead of I/O request
processing.
I wonder whether BlockDriver should be called ImageFormatDriver instead
to differentiate it from protocol drivers (which are block drivers) as
they cannot be implemented with the mappings-based interface.
Stefan
>
> v2:
> - Rebased on top of current git master with qemu_api::errno patches
> applied
> - Changed 'node' in MappingTarget from a dummy () to Arc<BdrvChild>
> - Changed BdrvChild::read_uninit() to use Box<MaybeUninit<T>>
> - Use libc crate instead of letting bindgen output EINVAL/EIO
> - Fixed errno translation logic, in parts by using qemu_api::errno
> - Changed two instances of incorrect *foo = ... into foo.write(...)
> - Added rust/block/ to MAINTAINERS
> - Some style and readability improvements
>
> Kevin Wolf (11):
> rust: Build separate qemu_api_tools and qemu_api_system
> meson: Add rust_block_ss and link tools with it
> rust: Add some block layer bindings
> rust/qemu-api: Add wrappers to run futures in QEMU
> rust/block: Add empty crate
> rust/block: Add I/O buffer traits
> block: Add bdrv_open_blockdev_ref_file()
> rust/block: Add driver module
> rust/block: Add read support for block drivers
> bochs-rs: Add bochs block driver reimplementation in Rust
> rust/block: Add format probing
>
> include/block/block-global-state.h | 4 +
> include/qemu/coroutine-rust.h | 24 +++
> rust/wrapper-system.h | 46 +++++
> rust/wrapper.h | 16 +-
> block.c | 31 ++-
> util/qemu-co-rust-async.c | 55 +++++
> MAINTAINERS | 1 +
> meson.build | 47 ++++-
> rust/Cargo.lock | 8 +
> rust/Cargo.toml | 1 +
> rust/block/Cargo.toml | 16 ++
> rust/block/README.md | 3 +
> rust/block/meson.build | 20 ++
> rust/block/src/bochs.rs | 317 +++++++++++++++++++++++++++++
> rust/block/src/driver.rs | 309 ++++++++++++++++++++++++++++
> rust/block/src/iobuffer.rs | 94 +++++++++
> rust/block/src/lib.rs | 5 +
> rust/hw/char/pl011/meson.build | 3 +-
> rust/hw/timer/hpet/meson.build | 3 +-
> rust/meson.build | 12 +-
> rust/qemu-api/Cargo.toml | 1 +
> rust/qemu-api/build.rs | 10 +-
> rust/qemu-api/meson.build | 80 +++++---
> rust/qemu-api/src/bindings.rs | 52 +++--
> rust/qemu-api/src/futures.rs | 77 +++++++
> rust/qemu-api/src/lib.rs | 6 +
> rust/qemu-api/src/prelude.rs | 3 +
> rust/qemu-api/src/zeroable.rs | 34 ++--
> storage-daemon/meson.build | 2 +-
> util/meson.build | 3 +
> 30 files changed, 1188 insertions(+), 95 deletions(-)
> create mode 100644 include/qemu/coroutine-rust.h
> create mode 100644 rust/wrapper-system.h
> create mode 100644 util/qemu-co-rust-async.c
> create mode 100644 rust/block/Cargo.toml
> create mode 100644 rust/block/README.md
> create mode 100644 rust/block/meson.build
> create mode 100644 rust/block/src/bochs.rs
> create mode 100644 rust/block/src/driver.rs
> create mode 100644 rust/block/src/iobuffer.rs
> create mode 100644 rust/block/src/lib.rs
> create mode 100644 rust/qemu-api/src/futures.rs
>
> --
> 2.48.1
>
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
prev parent reply other threads:[~2025-03-05 10:24 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-18 18:20 [PATCH v2 00/11] rust/block: Add minimal block driver bindings Kevin Wolf
2025-02-18 18:20 ` [PATCH v2 01/11] rust: Build separate qemu_api_tools and qemu_api_system Kevin Wolf
2025-02-20 7:10 ` Zhao Liu
2025-02-18 18:20 ` [PATCH v2 02/11] meson: Add rust_block_ss and link tools with it Kevin Wolf
2025-02-18 18:20 ` [PATCH v2 03/11] rust: Add some block layer bindings Kevin Wolf
2025-02-18 18:20 ` [PATCH v2 04/11] rust/qemu-api: Add wrappers to run futures in QEMU Kevin Wolf
2025-02-20 6:35 ` Zhao Liu
2025-02-20 14:58 ` Kevin Wolf
2025-03-05 2:15 ` Stefan Hajnoczi
2025-02-18 18:20 ` [PATCH v2 05/11] rust/block: Add empty crate Kevin Wolf
2025-02-19 6:46 ` Zhao Liu
2025-02-18 18:20 ` [PATCH v2 06/11] rust/block: Add I/O buffer traits Kevin Wolf
2025-02-18 18:20 ` [PATCH v2 07/11] block: Add bdrv_open_blockdev_ref_file() Kevin Wolf
2025-02-18 18:20 ` [PATCH v2 08/11] rust/block: Add driver module Kevin Wolf
2025-02-20 6:52 ` Zhao Liu
2025-03-05 2:43 ` Stefan Hajnoczi
2025-02-18 18:20 ` [PATCH v2 09/11] rust/block: Add read support for block drivers Kevin Wolf
2025-02-19 6:11 ` Paolo Bonzini
2025-02-19 13:02 ` Kevin Wolf
2025-02-19 22:42 ` Paolo Bonzini
2025-03-05 3:04 ` Stefan Hajnoczi
2025-03-05 9:56 ` Stefan Hajnoczi
2025-02-18 18:20 ` [PATCH v2 10/11] bochs-rs: Add bochs block driver reimplementation in Rust Kevin Wolf
2025-02-20 7:02 ` Zhao Liu
2025-03-05 10:21 ` Stefan Hajnoczi
2025-02-18 18:20 ` [PATCH v2 11/11] rust/block: Add format probing Kevin Wolf
2025-03-05 10:23 ` Stefan Hajnoczi [this message]
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=20250305102359.GF247800@fedora \
--to=stefanha@gmail.com \
--cc=hreitz@redhat.com \
--cc=kwolf@redhat.com \
--cc=manos.pitsidianakis@linaro.org \
--cc=pbonzini@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-rust@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 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.