RustInQemu: Difference between revisions

From QEMU
m (Put lore/patchew links behind link descriptions to keep text tidy)
 
(94 intermediate revisions by 4 users not shown)
Line 1: Line 1:
For the old RustInQemu page, see [[RustInQemu/2022]]
For the old RustInQemu page, see [[RustInQemu/2022]]


== Active efforts in 2024 ==
== Active effort ==


* <code>Subject: [RFC 0/6] scripts: Rewrite simpletrace printer in Rust</code><br /><code>Date: Mon, 27 May 2024 16:14:15 +0800</code><br />[https://lore.kernel.org/qemu-devel/20240527081421.2258624-1-zhao1.liu@intel.com/ RFC v1]
* [https://lore.kernel.org/qemu-devel/d3d1944e-2482-4aa7-b621-596246a08107@gnu.org/ Current state]
* ARM PL011 UART device model in Rust<br /><code>Subject: [RFC PATCH v1 0/6] Implement ARM PL011 in Rust</code><br /><code>Date: Mon, 10 Jun 2024 21:22:35 +0300</code><br />[https://lore.kernel.org/qemu-devel/cover.rust-pl011-rfc-v1.git.manos.pitsidianakis@linaro.org/ RFC v1] [https://lore.kernel.org/qemu-devel/rust-pl011-rfc-v2.git.manos.pitsidianakis@linaro.org v2]
* [https://www.qemu.org/docs/master/devel/rust.html Documentation]
** Meson integration
* Past updates: [https://lore.kernel.org/qemu-devel/17ad81c3-98fc-44c2-8f65-f5e2cc07030b@gnu.org/ January 2025] [https://lore.kernel.org/all/cc40943e-dec1-4890-a1d9-579350ce296f@pbonzini.local/ November 2024]
** Bindings generation


== Past efforts ==
== Past efforts ==


* <code>[RFC v3 00/32] Rust binding for QAPI and qemu-ga QMP handler examples</code><br />[https://patchew.org/QEMU/20210907121943.3498701-1-marcandre.lureau@redhat.com/ on patchew] [https://lore.kernel.org/qemu-devel/20210907121943.3498701-1-marcandre.lureau@redhat.com/ on lore]
* <code>[RFC v3 00/32] Rust binding for QAPI and qemu-ga QMP handler examples</code><br />[https://patchew.org/QEMU/20210907121943.3498701-1-marcandre.lureau@redhat.com/ on patchew] [https://lore.kernel.org/qemu-devel/20210907121943.3498701-1-marcandre.lureau@redhat.com/ on lore]
* <code>Subject: [RFC 0/6] scripts: Rewrite simpletrace printer in Rust</code><br /><code>Date: Mon, 27 May 2024 16:14:15 +0800</code><br />[https://lore.kernel.org/qemu-devel/20240527081421.2258624-1-zhao1.liu@intel.com/ RFC v1]
== Work in progress ==
=== Paolo ===
* Improving Cargo support in Meson
=== Manos ===
* generate qdev properties via macros
=== Zhao ===
* vm-memory?
=== Kevin ===
* Executing async code, block driver implementations
** https://lore.kernel.org/qemu-devel/20250211214328.640374-1-kwolf@redhat.com/
== Bugs ==
* Add BQL abstraction for tests - avoid running them with "--test-threads 1"
* [https://github.com/mesonbuild/meson/issues/8828 Distros would prefer to link libstd dynamically]; Rust-enabled QEMU binaries are huge


== Possible project targets ==
== Possible project targets ==
=== Projects with some code ===
* visitors/QOM properties, could be interesting for <code>hw/sensor/tmp105.c</code>...
** https://lore.kernel.org/qemu-devel/20250605101124.367270-1-pbonzini@redhat.com/
* complete vmstate bindings (needs const_refs_static in Rust 1.83.0, Zhao+Paolo have a prototype)
** https://lore.kernel.org/qemu-devel/20250505100854.73936-1-pbonzini@redhat.com/
=== Cleanups ===
* split qemu_api into multiple crates
=== Nice things to have ===
* Remove need for manual "meson subprojects update --reset" when updating packagefiles/
* Improve tool integration
** Run code checks a la "meson test --suite codecheck"? (clippy and rustfmt)
* Place rustdoc output for master somewhere?
* distros need dynamically linked libstd
** rewrite all main()s in Rust and use [https://github.com/mesonbuild/meson/issues/14224 -C prefer-dynamic]?
** or should Meson be able to link C programs with rlibs?
=== New code to write===
* more QOM procedural macros
** generate qdev properties
** generate parts of TypeInfo?
** monomorphization of <tt>T: IsA&lt;Class&gt;</tt> to <tt>&T</tt> (like the momo crate)
* safe object creation with [https://docs.rs/pinned-init/ pinned_init, originating from Linux])
* DMA (investigate vm-memory?)
** https://lore.kernel.org/qemu-devel/aCysct2L8Bosqy0N@intel.com/
* feature parity for pl011
** Trace/log (Summer of Code)
=== Improved clippy coverage in CI? ===
* run clippy as part of "make check"
* add to CI a fallible job that runs on nightly clippy with <tt>-Dclippy::complexity -Dclippy::perf -Dclippy::suspicious -Dclippy::style -Dunknown_lints</tt>. the job should generally pass, and if a new lint triggers it probably should be added to Cargo.toml as either "allow" (rare) or "deny" (possibly after adding #[allow()] to the source).


=== Miscellanea  ===
=== Miscellanea  ===


- <code>qemu-bridge-helper.c</code> Re-write SUID C executable with useful features.
* <code>qemu-bridge-helper.c</code> Re-write SUID C executable with useful features.


=== Devices  ===
=== Devices  ===


- <code>hw/block/pflash_cfi01.c</code>, <code>hw/block/pflash_cfi02.c</code> (claimed, WIP)
* <code>hw/block/pflash_cfi01.c</code>, <code>hw/block/pflash_cfi02.c</code> (claimed, WIP)
 
** needs block bindings
- <code>hw/mem/nvdimm.c</code> (suggested by [[User:Manos|Manos]])
* <code>hw/timer/i8254.c</code> (claimed, WIP)
 
* <code>hw/mem/nvdimm.c</code> (suggested by [[User:Manos|Manos]])
- <code>hw/timer/i8254.c</code> (claimed, WIP)


[[Category:RustInQemu]]
[[Category:RustInQemu]]

Latest revision as of 13:35, 5 June 2025

For the old RustInQemu page, see RustInQemu/2022

Active effort

Past efforts

  • [RFC v3 00/32] Rust binding for QAPI and qemu-ga QMP handler examples
    on patchew on lore
  • Subject: [RFC 0/6] scripts: Rewrite simpletrace printer in Rust
    Date: Mon, 27 May 2024 16:14:15 +0800
    RFC v1

Work in progress

Paolo

  • Improving Cargo support in Meson

Manos

  • generate qdev properties via macros

Zhao

  • vm-memory?

Kevin

Bugs

Possible project targets

Projects with some code

Cleanups

  • split qemu_api into multiple crates

Nice things to have

  • Remove need for manual "meson subprojects update --reset" when updating packagefiles/
  • Improve tool integration
    • Run code checks a la "meson test --suite codecheck"? (clippy and rustfmt)
  • Place rustdoc output for master somewhere?
  • distros need dynamically linked libstd
    • rewrite all main()s in Rust and use -C prefer-dynamic?
    • or should Meson be able to link C programs with rlibs?

New code to write

Improved clippy coverage in CI?

  • run clippy as part of "make check"
  • add to CI a fallible job that runs on nightly clippy with -Dclippy::complexity -Dclippy::perf -Dclippy::suspicious -Dclippy::style -Dunknown_lints. the job should generally pass, and if a new lint triggers it probably should be added to Cargo.toml as either "allow" (rare) or "deny" (possibly after adding #[allow()] to the source).

Miscellanea

  • qemu-bridge-helper.c Re-write SUID C executable with useful features.

Devices

  • hw/block/pflash_cfi01.c, hw/block/pflash_cfi02.c (claimed, WIP)
    • needs block bindings
  • hw/timer/i8254.c (claimed, WIP)
  • hw/mem/nvdimm.c (suggested by Manos)