summary refs log tree commit diff stats
Commit message (Collapse)AuthorAgeFilesLines
* qemu-thread: Use futex for QemuEvent on WindowsAkihiko Odaki2025-06-067-315/+182
| | | | | | | | | | | Use the futex-based implementation of QemuEvent on Windows to remove code duplication and remove the overhead of event object construction and destruction. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Link: https://lore.kernel.org/r/20250526-event-v4-6-5b784cc8e1de@daynix.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* qemu-thread: Avoid futex abstraction for non-LinuxAkihiko Odaki2025-06-061-31/+53
| | | | | | | | | | | | | | | | | | | | | | | | | | qemu-thread used to abstract pthread primitives into futex for the QemuEvent implementation of POSIX systems other than Linux. However, this abstraction has one key difference: unlike futex, pthread primitives require an explicit destruction, and it must be ordered after wait and wake operations. It would be easier to perform destruction if a wait operation ensures the corresponding wake operation finishes as POSIX semaphore does, but that requires to protect state accesses in qemu_event_set() and qemu_event_wait() with a mutex. On the other hand, real futex does not need such a protection but needs complex barrier and atomic operations to ensure ordering between the two functions. Add special implementations of qemu_event_set() and qemu_event_wait() using pthread primitives. qemu_event_wait() will ensure qemu_event_set() finishes, and these functions will avoid complex barrier and atomic operations to ensure ordering between them. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Tested-by: Phil Dennis-Jordan <phil@philjordan.eu> Reviewed-by: Phil Dennis-Jordan <phil@philjordan.eu> Link: https://lore.kernel.org/r/20250526-event-v4-5-5b784cc8e1de@daynix.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* qemu-thread: Replace __linux__ with CONFIG_LINUXAkihiko Odaki2025-06-062-4/+4
| | | | | | | | | | scripts/checkpatch.pl warns for __linux__ saying "architecture specific defines should be avoided". Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Link: https://lore.kernel.org/r/20250526-event-v4-4-5b784cc8e1de@daynix.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* futex: Support WindowsAkihiko Odaki2025-06-066-17/+53
| | | | | | | | | Windows supports futex-like APIs since Windows 8 and Windows Server 2012. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Link: https://lore.kernel.org/r/20250529-event-v5-2-53b285203794@daynix.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* futex: Check value after qemu_futex_wait()Akihiko Odaki2025-06-063-13/+24
| | | | | | | | | | | | | | | | | futex(2) - Linux manual page https://man7.org/linux/man-pages/man2/futex.2.html > Note that a wake-up can also be caused by common futex usage patterns > in unrelated code that happened to have previously used the futex > word's memory location (e.g., typical futex-based implementations of > Pthreads mutexes can cause this under some conditions). Therefore, > callers should always conservatively assume that a return value of 0 > can mean a spurious wake-up, and use the futex word's value (i.e., > the user-space synchronization scheme) to decide whether to continue > to block or not. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Link: https://lore.kernel.org/r/20250529-event-v5-1-53b285203794@daynix.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* i386/kvm: Prefault memory on page state changeTom Lendacky2025-06-063-5/+29
| | | | | | | | | | | | | | | | | | | | A page state change is typically followed by an access of the page(s) and results in another VMEXIT in order to map the page into the nested page table. Depending on the size of page state change request, this can generate a number of additional VMEXITs. For example, under SNP, when Linux is utilizing lazy memory acceptance, memory is typically accepted in 4M chunks. A page state change request is submitted to mark the pages as private, followed by validation of the memory. Since the guest_memfd currently only supports 4K pages, each page validation will result in VMEXIT to map the page, resulting in 1024 additional exits. When performing a page state change, invoke KVM_PRE_FAULT_MEMORY for the size of the page state change in order to pre-map the pages and avoid the additional VMEXITs. This helps speed up boot times. Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> Link: https://lore.kernel.org/r/f5411c42340bd2f5c14972551edb4e959995e42b.1743193824.git.thomas.lendacky@amd.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* rust: make TryFrom macro more resilientPaolo Bonzini2025-06-061-3/+4
| | | | | | | | | If the enum includes values such as "Ok", "Err", or "Error", the TryInto macro can cause errors. Be careful and qualify identifiers with the full path, or in the case of TryFrom<>::Error do not use the associated type at all. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* docs: update Rust module statusPaolo Bonzini2025-06-061-1/+1
| | | | | | | error is new; offset_of is gone. Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* rust/hpet: Drop BqlCell wrapper for num_timersZhao Liu2025-06-061-16/+11
| | | | | | | | | | | | Now that the num_timers field is initialized as a property, someone may change its default value using qdev_prop_set_uint8(), but the value is fixed after the Rust code sees it first. Since there is no need to modify it after realize(), it is not to be necessary to have a BqlCell wrapper. Signed-off-by: Zhao Liu <zhao1.liu@intel.com> Link: https://lore.kernel.org/r/20250520152750.2542612-4-zhao1.liu@intel.com [Remove .into() as well. - Paolo] Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* rust/hpet: return errors from realize if properties are incorrectPaolo Bonzini2025-06-062-13/+10
| | | | | | | | Match the code in hpet.c; this also allows removing the BqlCell from the num_timers field. Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* hpet: return errors from realize if properties are incorrectPaolo Bonzini2025-06-061-7/+8
| | | | | | | | Do not silently adjust num_timers, and fail if intcap is 0. Reviewed-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* hpet: adjust VMState for consistency with Rust versionPaolo Bonzini2025-06-061-3/+3
| | | | | | | | No functional change intended. Suggested-by: Zhao Liu <zhao1.liu@intel.com> Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* rust/hpet: change type of num_timers to usizePaolo Bonzini2025-06-061-12/+12
| | | | | | | | | | | | Remove the need to convert after every read of the BqlCell. Because the vmstate uses a u8 as the size of the VARRAY, this requires switching the VARRAY to use num_timers_save; which in turn requires ensuring that the num_timers_save is always there. For simplicity do this by removing support for version 1, which QEMU has not been producing for ~15 years. Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* rust: qdev: support returning errors from realizePaolo Bonzini2025-06-063-8/+14
| | | | | Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* rust: qemu-api: add tests for Error bindingsPaolo Bonzini2025-06-051-0/+104
| | | | Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* rust: qemu-api: add bindings to ErrorPaolo Bonzini2025-06-057-0/+341
| | | | | | | | | | | | | | | | | | | | | | | | Provide an implementation of std::error::Error that bridges the Rust anyhow::Error and std::panic::Location types with QEMU's Error*. It also has several utility methods, analogous to error_propagate(), that convert a Result into a return value + Error** pair. One important difference is that these propagation methods *panic* if *errp is NULL, unlike error_propagate() which eats subsequent errors[1]. The reason for this is that in C you have an error_set*() call at the site where the error is created, and calls to error_propagate() are relatively rare. In Rust instead, even though these functions do "propagate" a qemu_api::Error into a C Error**, there is no error_setg() anywhere that could check for non-NULL errp and call abort(). error_propagate()'s behavior of ignoring subsequent errors is generally considered weird, and there would be a bigger risk of triggering it from Rust code. [1] This is actually a violation of the preconditions of error_propagate(), so it should not happen. But you never know... Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* util/error: make func optionalPaolo Bonzini2025-06-052-2/+9
| | | | | | | The function name is not available in Rust, so make it optional. Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* util/error: allow non-NUL-terminated err->srcPaolo Bonzini2025-06-052-3/+11
| | | | | | | | | Rust makes the current file available as a statically-allocated string, but without a NUL terminator. Allow this by storing an optional maximum length in the Error. Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* util/error: expose Error definition to Rust codePaolo Bonzini2025-06-053-9/+28
| | | | | | | This is used to preserve the file and line in a roundtrip from C Error to Rust and back to C. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* subprojects: add the foreign cratePaolo Bonzini2025-06-057-3/+41
| | | | | | | | | | | | | | This is a cleaned up and separated version of the patches at https://lore.kernel.org/all/20240701145853.1394967-4-pbonzini@redhat.com/ https://lore.kernel.org/all/20240701145853.1394967-5-pbonzini@redhat.com/ Its first user will be the Error bindings; for example a QEMU Error ** can be converted to a Rust Option using unsafe { Option::<Error>::from_foreign(c_error) } Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* subprojects: add the anyhow cratePaolo Bonzini2025-06-057-3/+46
| | | | | | | | | This is a standard replacement for Box<dyn Error> which is more efficient (it only occcupies one word) and provides a backtrace of the error. This could be plumbed into &error_abort in the future. Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into stagingStefan Hajnoczi2025-06-0434-147/+932
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * rust: use native Meson support for clippy and rustdoc * rust: add "bits", a custom bitflags implementation * target/i386: Remove FRED dependency on WRMSRNS * target/i386: Add the immediate form MSR access instruction support * TDX fixes # -----BEGIN PGP SIGNATURE----- # # iQFIBAABCgAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmg/XrsUHHBib256aW5p # QHJlZGhhdC5jb20ACgkQv/vSX3jHroOPIwf/VXh98Wd+7BJLkNJVFpczSF7YhJ5J # a5BcWLOdVrzEJoqvfc9lkubgpShgzYDYJH99F/FloHddkPvZ1NRB2JXtDB1O3sSC # NGaI4YM8uA/k21pt1jQtDJkk3Az7GNIBIcvi4HR5GjTOvOKGOXLpYErK52lM4GNG # Aa17/Rb9Ug+QzyuS1M+mDPFdY2X6Hore2jXsp3ZH+U8hs+khecHEPsZUZ/Nlr1Z7 # UoiYks4U29wtVJ/BCjNkgXoMJC6uqL/nOP5dLJBgboOodrtwdwpDMIUcyPLrOnjf # ugJx0zYHIVdqpdft72EvLD92bzB8WoUiPsUA/dG45gGmhzuYWDmOqSdaKg== # =l0gm # -----END PGP SIGNATURE----- # gpg: Signature made Tue 03 Jun 2025 16:44:43 EDT # gpg: using RSA key F13338574B662389866C7682BFFBD25F78C7AE83 # gpg: issuer "pbonzini@redhat.com" # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * tag 'for-upstream' of https://gitlab.com/bonzini/qemu: rust: qemu-api-macros: add from_bits and into_bits to #[derive(TryInto)] rust: pl011: use the bits macro rust: add "bits", a custom bitflags implementation i386/tdvf: Fix build on 32-bit host i386/tdx: Fix build on 32-bit host meson: use config_base_arch for target libraries target/i386: Add the immediate form MSR access instruction support target/i386: Add a new CPU feature word for CPUID.7.1.ECX target/i386: Remove FRED dependency on WRMSRNS rust: use native Meson support for clippy and rustdoc rust: cell: remove support for running doctests with "cargo test --doc" rust: add qemu-api doctests to "meson test" build, dockerfiles: add support for detecting rustdoc rust: use "objects" for Rust executables as well meson: update to version 1.8.1 rust: bindings: allow ptr_offset_with_cast Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
| * rust: qemu-api-macros: add from_bits and into_bits to #[derive(TryInto)]Paolo Bonzini2025-06-031-8/+36
| | | | | | | | | | | | | | These const functions make it possible to use enums easily together with the bitfield-struct crate. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| * rust: pl011: use the bits macroPaolo Bonzini2025-06-035-44/+49
| | | | | | | | | | | | This avoids the repeated ".0" when using the Interrupt struct. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| * rust: add "bits", a custom bitflags implementationPaolo Bonzini2025-06-038-0/+728
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | One common thing that device emulation does is manipulate bitmasks, for example to check whether two bitmaps have common bits. One example in the pl011 crate is the checks for pending interrupts, where an interrupt cause corresponds to at least one interrupt source from a fixed set. Unfortunately, this is one case where Rust *can* provide some kind of abstraction but it does so with a rather Perl-ish There Is More Way To Do It. It is not something where a crate like "bilge" helps, because it only covers the packing of bits in a structure; operations like "are all bits of Y set in X" almost never make sense for bit-packed structs; you need something else, there are several crates that do it and of course we're going to roll our own. In particular I examined three: - bitmask (https://docs.rs/bitmask/0.5.0/bitmask/) does not support const at all. This is a showstopper because one of the ugly things in the current pl011 code is the ugliness of code that defines interrupt masks at compile time: pub const E: Self = Self(Self::OE.0 | Self::BE.0 | Self::PE.0 | Self::FE.0); or even worse: const IRQMASK: [u32; 6] = [ Interrupt::E.0 | Interrupt::MS.0 | Interrupt::RT.0 | Interrupt::TX.0 | Interrupt::RX.0, ... } You would have to use roughly the same code---"bitmask" only helps with defining the struct. - bitmask_enum (https://docs.rs/bitmask-enum/2.2.5/bitmask_enum/) does not have a good separation of "valid" and "invalid" bits, so for example "!x" will invert all 16 bits if you choose u16 as the representation -- even if you only defined 10 bits. This makes it easier to introduce subtle bugs in comparisons. - bitflags (https://docs.rs/bitflags/2.6.0/bitflags/) is generally the most used such crate and is the one that I took most inspiration from with respect to the syntax. It's a pretty sophisticated implementation, with a lot of bells and whistles such as an implementation of "Iter" that returns the bits one at a time. The main thing that all of them lack, however, is a way to simplify the ugly definitions like the above. "bitflags" includes const methods that perform AND/OR/XOR of masks (these are necessary because Rust operator overloading does not support const yet, and therefore overloaded operators cannot be used in the definition of a "static" variable), but they become even more verbose and unmanageable, like Interrupt::E.union(Interrupt::MS).union(Interrupt::RT).union(Interrupt::TX).union(Interrupt::RX) This was the main reason to create "bits", which allows something like bits!(Interrupt: E | MS | RT | TX | RX) and expands it 1) add "Interrupt::" in front of all identifiers 2) convert operators to the wordy const functions like "union". It supports boolean operators "&", "|", "^", "!" and parentheses, with a relatively simple recursive descent parser that's implemented in qemu_api_macros. Since I don't remember exactly how the macro was developed, I cannot exclude that it contains code from "bitflags". Therefore, I am conservatively leaving in the MIT and Apache 2.0 licenses from bitflags. In fact, I think there would be a benefit in being able to push code back to "bitflags" anyway whenever applicable, so that the two libraries do not diverge too much, so that's another reason to use this. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| * i386/tdvf: Fix build on 32-bit hostCédric Le Goater2025-06-031-3/+3
| | | | | | | | | | | | | | | | | | Use PRI formats where required. Cc: Isaku Yamahata <isaku.yamahata@intel.com> Signed-off-by: Cédric Le Goater <clg@redhat.com> Link: https://lore.kernel.org/r/20250602173101.1052983-3-clg@redhat.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| * i386/tdx: Fix build on 32-bit hostCédric Le Goater2025-06-031-13/+13
| | | | | | | | | | | | | | | | | | Use PRI formats where required and fix pointer cast. Cc: Xiaoyao Li <xiaoyao.li@intel.com> Signed-off-by: Cédric Le Goater <clg@redhat.com> Link: https://lore.kernel.org/r/20250602173101.1052983-2-clg@redhat.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| * meson: use config_base_arch for target librariesPierrick Bouvier2025-06-031-4/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed commit introduced common dependencies for target libraries. Alas, it wrongly reused the 'target' variable, which was previously set from another loop. Thus, some dependencies were missing depending on order of target list, as found here [1]. The fix is to use the correct config_base_arch instead. Kudos to Thomas Huth who had this right, before I reimplement it, and introduce this bug. [1] https://lore.kernel.org/qemu-devel/c54469ce-0385-4aea-b345-47711e9e61de@linaro.org/ Fixes: 4fb54de823e9 (meson: build target libraries with common dependencies) Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Reviewed-by: Thomas Huth <thuth@redhat.com> Tested-by: Cédric Le Goater <clg@redhat.com> Link: https://lore.kernel.org/r/20250602233801.2699961-1-pierrick.bouvier@linaro.org Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| * target/i386: Add the immediate form MSR access instruction supportXin Li (Intel)2025-06-032-1/+5
| | | | | | | | | | | | | | | | | | | | | | The immediate form of MSR access instructions are primarily motivated by performance, not code size: by having the MSR number in an immediate, it is available *much* earlier in the pipeline, which allows the hardware much more leeway about how a particular MSR is handled. Signed-off-by: Xin Li (Intel) <xin@zytor.com> Link: https://lore.kernel.org/r/20250103084827.1820007-4-xin@zytor.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| * target/i386: Add a new CPU feature word for CPUID.7.1.ECXXin Li (Intel)2025-06-032-1/+23
| | | | | | | | | | | | | | | | | | The immediate form of MSR access instructions will use this new CPU feature word. Signed-off-by: Xin Li (Intel) <xin@zytor.com> Link: https://lore.kernel.org/r/20250103084827.1820007-3-xin@zytor.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| * target/i386: Remove FRED dependency on WRMSRNSXin Li (Intel)2025-06-031-4/+0
| | | | | | | | | | | | | | | | | | | | | | WRMSRNS doesn't become a required feature for FERD, and Linux has removed the dependency, as such remove it from Qemu. Cc: qemu-stable@nongnu.org Signed-off-by: Xin Li (Intel) <xin@zytor.com> Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com> Link: https://lore.kernel.org/r/20250103084827.1820007-2-xin@zytor.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| * rust: use native Meson support for clippy and rustdocPaolo Bonzini2025-06-036-22/+10
| | | | | | | | | | | | | | | | | | | | | | | | Meson has support for invoking clippy and rustdoc on all crates (1.7.0 for clippy, 1.8.0 for rustdoc). Use it instead of the homegrown version; this requires disabling the multiple_crate_versions lint (the only one that was enabled from the "cargo" group)---which was not particularly useful anyway because all dependencies are converted by hand into Meson subprojects. rustfmt is still not supported. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| * rust: cell: remove support for running doctests with "cargo test --doc"Paolo Bonzini2025-06-031-13/+9
| | | | | | | | | | | | This is not needed anymore now that tests link with libqemuutil. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| * rust: add qemu-api doctests to "meson test"Paolo Bonzini2025-06-034-9/+16
| | | | | | | | | | | | | | | | | | | | | | Doctests are weird. They are essentially integration tests, but they're "ran" by executing rustdoc --test, which takes a compiler-ish command line. This is supported by Meson 1.8.0. Because they run the linker and need all the .o files, run them in the build jobs rather than the test jobs. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| * build, dockerfiles: add support for detecting rustdocPaolo Bonzini2025-06-035-0/+16
| | | | | | | | | | | | | | | | rustdoc is effectively a custom version of rustc, and it is necessary to specify it in order to run doctests from Meson. Add the relevant configure option and environment variables. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| * rust: use "objects" for Rust executables as wellPaolo Bonzini2025-06-033-24/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | libqemuutil is not meant be linked as a whole; if modules are enabled, doing so results in undefined symbols (corresponding to QMP commands) in rust/qemu-api/rust-qemu-api-integration. Support for "objects" in Rust executables is available in Meson 1.8.0; use it to switching to the same dependencies that C targets use: link_with for libqemuutil, and objects for everything else. Reported-by: Bernhard Beschow <shentey@gmail.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| * meson: update to version 1.8.1Paolo Bonzini2025-06-036-4/+16
| | | | | | | | | | | | | | | | | | | | | | | | This adds several improvements to Rust support, including native clippy and rustdoc targets, the "objects" keyword, and running doctests. Require it only when Rust support is requested, to avoid putting a strict requirement on all build platforms for the sake of an experimental feature. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| * rust: bindings: allow ptr_offset_with_castPaolo Bonzini2025-06-031-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is produced by recent versions of bindgen: warning: use of `offset` with a `usize` casted to an `isize` --> /builds/bonzini/qemu/rust/target/debug/build/qemu_api-35cb647f4db404b8/out/bindings.inc.rs:39:21 | 39 | let byte = *(core::ptr::addr_of!((*this).storage) as *const u8).offset(byte_index as isize); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(core::ptr::addr_of!((*this).storage) as *const u8).add(byte_index)` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast = note: `#[warn(clippy::ptr_offset_with_cast)]` on by default warning: use of `offset` with a `usize` casted to an `isize` --> /builds/bonzini/qemu/rust/target/debug/build/qemu_api-35cb647f4db404b8/out/bindings.inc.rs:68:13 | 68 | (core::ptr::addr_of_mut!((*this).storage) as *mut u8).offset(byte_index as isize); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(core::ptr::addr_of_mut!((*this).storage) as *mut u8).add(byte_index)` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast This seems to be new in bindgen 0.71.0, possibly related to bindgen commit 33006185b7878 ("Add raw_ref_macros feature", 2024-11-22). Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* | Merge tag 'pull-qapi-2025-06-03' of https://repo.or.cz/qemu/armbru into stagingStefan Hajnoczi2025-06-0322-224/+219
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QAPI patches patches for 2025-06-03 # -----BEGIN PGP SIGNATURE----- # # iQJGBAABCAAwFiEENUvIs9frKmtoZ05fOHC0AOuRhlMFAmg+l58SHGFybWJydUBy # ZWRoYXQuY29tAAoJEDhwtADrkYZTKhYP/jp/b96B6341Z7czsBkU+CheIbPzLhvw # QaahaM8C2B8opiiEIU46rRdV2ikccd5npj5rVEioJ8z3TLPfpQiWcKKyBBHBQGLW # bIlAX0Ti/s6RTsSpduwAqsbwThJYEeERA5Bzn9qZTubRy9O8JYKisvRIs0SsqIU0 # kp3MXg4xWZUs+OGGl5SzLsoei7FaTmF3KGN9DMHM8ra21c82lWwKAFOUIERFWI/J # 9Ed6pU58oE0hFd3LD7N4HAxyExCZN5ifcPI1ILEj/RSTaYedoQZ1PMP9PRfmyEXJ # StgbbpnuaSBd8uWnahDutTpsZvBHenZpZF95loPZOSWNHIB7djCJTk9nI6Uc8bUH # UytdLkcGXoWjbRJHua9feW7k8HJAMHZq+6m7AqvbdWUBrxpvutuqGE2vJqZSEjad # 43+azaQRnXT0bNJ4oB6oXccyteaRf0QdZnKjdSCRtMsu6RZNNtVkx9kaE/lnwvBF # YigN0hFeGc+0LxjOUjD2JgsJS+i//jW3LFpxwXaVXBqmpl9iiBZYjAOdoC0tJzsE # eMOXcQGZJtLCmhOEVs7bRevuKCIjwIm/XQw6R31nE1kLf/jEjGox5IaBv8VP4mIf # EoEiL5Euh5zAejGa5vo7SIJ5G8LglV4U9eK9ee9iveITENhlcOUfMDWnFkYjbCt+ # n6aPxPvN9kQ2 # =MPkT # -----END PGP SIGNATURE----- # gpg: Signature made Tue 03 Jun 2025 02:35:11 EDT # gpg: using RSA key 354BC8B3D7EB2A6B68674E5F3870B400EB918653 # gpg: issuer "armbru@redhat.com" # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" [full] # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" [full] # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * tag 'pull-qapi-2025-06-03' of https://repo.or.cz/qemu/armbru: qapi: Improve documentation around job state @concluded qapi: Tidy up references to job state CONCLUDED qapi: Mention both job-cancel and block-job-cancel in doc comments qapi: Refer to job-FOO instead of deprecated block-job-FOO in docs qapi: Spell JSON null correctly in blockdev-reopen documentation qapi: Use proper markup instead of CAPS for emphasis in doc comments qapi: Fix capitalization in doc comments qapi: Correct spelling of QEMU in doc comments qapi: Drop a problematic (Since: 2.11) from query-hotpluggable-cpus qapi: Avoid breaking lines within (since X.Y) qapi: Move (since X.Y) to end of description qapi: Tidy up whitespace in doc comments qapi: Tidy up run-together sentences in doc comments Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
| * | qapi: Improve documentation around job state @concludedMarkus Armbruster2025-06-032-13/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We use "the query list" in a few places. It's not entirely obvious what that means. It's actually the output of query-jobs or query-block-jobs. Documentation of @auto-dismiss talks about the job disappearing from the query list when it reaches state @concluded. This is less than precise. The job doesn't merely disappear from the query list, it disappears, period. Documentation of JobStatus @concluded explains "the job will remain in the query list until it is dismissed". Again less than precise. It remains in state @concluded until dismissed. Rephrase without use of "the query list" for clarity and precision. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20250527073916.1243024-14-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
| * | qapi: Tidy up references to job state CONCLUDEDMarkus Armbruster2025-06-032-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When talking about the job state machine, we refer to the states like READY, ABORTING, CONCLUDED, and so forth. Except in two places, where we use JOB_STATUS_CONCLUDED. Replace by CONCLUDED for consistency. We should arguably use the JobStatus enum values instead. Left for another day. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20250527073916.1243024-13-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
| * | qapi: Mention both job-cancel and block-job-cancel in doc commentsMarkus Armbruster2025-06-031-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | Several doc comments mention block-job-cancel where the more generic job-cancel would also work. Adjust them to mention both. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20250527073916.1243024-12-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
| * | qapi: Refer to job-FOO instead of deprecated block-job-FOO in docsMarkus Armbruster2025-06-031-29/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We deprecated several block-job-FOO commands in commit b836bf2ab68 (qapi/block-core: deprecate some block-job- APIs). Update the doc comments to refer to their replacements instead. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20250527073916.1243024-11-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
| * | qapi: Spell JSON null correctly in blockdev-reopen documentationMarkus Armbruster2025-06-031-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | The doc comment misspells JSON null as NULL. Fix that. Cc: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20250527073916.1243024-10-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
| * | qapi: Use proper markup instead of CAPS for emphasis in doc commentsMarkus Armbruster2025-06-034-19/+19
| | | | | | | | | | | | | | | | | | Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20250527073916.1243024-9-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
| * | qapi: Fix capitalization in doc commentsMarkus Armbruster2025-06-038-10/+10
| | | | | | | | | | | | | | | | | | Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20250527073916.1243024-8-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
| * | qapi: Correct spelling of QEMU in doc commentsMarkus Armbruster2025-06-0310-26/+26
| | | | | | | | | | | | | | | | | | | | | | | | Improve awkward phrasing in migrate-incoming While there. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20250527073916.1243024-7-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
| * | qapi: Drop a problematic (Since: 2.11) from query-hotpluggable-cpusMarkus Armbruster2025-06-031-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There is a (Since: 2.11) in a query-hotpluggable-cpus example. Versioning information ought to be in the command description, not examples. The command description is basically empty (there is a TODO about it). What exactly didn't work before 2.11 is not quite clear from the documentation. The example was added in commit 4dc3b151882 (s390x: implement query-hotpluggable-cpus), which suggests the command failed for the s390x target until then. This was almost eight years ago, and I doubt anyone still cares about this detail. Simply delete the problematic (Since: 2.11). Cc: David Hildenbrand <david@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20250527073916.1243024-6-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
| * | qapi: Avoid breaking lines within (since X.Y)Markus Armbruster2025-06-038-66/+66
| | | | | | | | | | | | | | | | | | | | | | | | Easier on the eyes and for grep. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20250527073916.1243024-5-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
| * | qapi: Move (since X.Y) to end of descriptionMarkus Armbruster2025-06-032-12/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | By convention, we put (since X.Y) at the end of the description. Move the ones that somehow ended up in the middle of the description to the end. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20250527073916.1243024-4-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>