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-pbonz...@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 > >
signature.asc
Description: PGP signature