From 1fdc058b3a5ca2bc5e8f82acc1b05bb704c289d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20M=C3=BCller?= Date: Sat, 7 Mar 2026 05:58:01 -0800 Subject: [PATCH 1/2] Update vm-memory dependency to 0.18 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make all workspace members compatible with vm-memory in version 0.18 and remove the dependency on vm-memory 0.16.2. Also fix up the version range specification, which was not correct (at least one version was not actually building) and in any event untested. The reason we need this change is because we need to use a single version of vm-memory, or we will see type/trait mismatches due to semver incompatible versions being used. Signed-off-by: Daniel Müller --- Cargo.lock | 29 ++++++++-------- src/arch/Cargo.toml | 2 +- src/arch/src/x86_64/mptable.rs | 2 +- src/arch/src/x86_64/regs.rs | 2 +- src/devices/Cargo.toml | 2 +- src/devices/src/virtio/balloon/device.rs | 2 +- src/devices/src/virtio/console/process_rx.rs | 29 ++++++++-------- src/devices/src/virtio/console/process_tx.rs | 36 +++++++++++--------- src/devices/src/virtio/descriptor_utils.rs | 5 +-- src/devices/src/virtio/gpu/virtio_gpu.rs | 2 +- src/devices/src/virtio/queue.rs | 4 +-- src/devices/src/virtio/vsock/packet.rs | 4 +-- src/kernel/Cargo.toml | 2 +- src/kernel/src/loader/mod.rs | 2 +- src/libkrun/Cargo.toml | 2 +- src/smbios/Cargo.toml | 2 +- src/vmm/Cargo.toml | 4 +-- src/vmm/src/builder.rs | 14 +++++--- src/vmm/src/linux/tee/amdsnp/mod.rs | 2 +- src/vmm/src/linux/vstate.rs | 4 +-- src/vmm/src/macos/vstate.rs | 2 +- src/vmm/src/worker.rs | 2 +- 22 files changed, 80 insertions(+), 75 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e606319fd..c9a660ebf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -455,7 +455,7 @@ dependencies = [ "polly", "rand", "rutabaga_gfx", - "thiserror 2.0.12", + "thiserror 2.0.18", "utils", "virtio-bindings", "vm-fdt", @@ -809,7 +809,7 @@ dependencies = [ "sha2", "sm3", "strum", - "thiserror 2.0.12", + "thiserror 2.0.18", ] [[package]] @@ -828,7 +828,7 @@ dependencies = [ "bitflags 2.10.0", "log", "static_assertions", - "thiserror 2.0.12", + "thiserror 2.0.18", ] [[package]] @@ -840,7 +840,7 @@ dependencies = [ "libc", "log", "static_assertions", - "thiserror 2.0.12", + "thiserror 2.0.18", ] [[package]] @@ -958,9 +958,8 @@ dependencies = [ [[package]] name = "linux-loader" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "870c3814345f050991f99869417779f6062542bcf4ed81db7a1b926ad1306638" +version = "0.13.2" +source = "git+https://github.com/d-e-s-o/linux-loader.git?branch=topic%2Fvm-memory-0.18#7bf0eb82734ff5cad8a1e5d263925f825ea22c6d" dependencies = [ "vm-memory", ] @@ -1606,11 +1605,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.18", ] [[package]] @@ -1626,9 +1625,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", @@ -1801,12 +1800,12 @@ checksum = "7e21282841a059bb62627ce8441c491f09603622cd5a21c43bfedc85a2952f23" [[package]] name = "vm-memory" -version = "0.16.2" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd5e56d48353c5f54ef50bd158a0452fc82f5383da840f7b8efc31695dd3b9d" +checksum = "9b55e753c7725603745cb32b2287ef7ef3da05c03c7702cda3fa8abe25ae0465" dependencies = [ "libc", - "thiserror 1.0.69", + "thiserror 2.0.18", "winapi", ] diff --git a/src/arch/Cargo.toml b/src/arch/Cargo.toml index 4b6efd6c5..253fdb85b 100644 --- a/src/arch/Cargo.toml +++ b/src/arch/Cargo.toml @@ -12,7 +12,7 @@ efi = [] [dependencies] libc = ">=0.2.39" -vm-memory = { version = ">=0.13", features = ["backend-mmap"] } +vm-memory = { version = "0.18", features = ["backend-mmap"] } vmm-sys-util = ">= 0.14" arch_gen = { path = "../arch_gen" } diff --git a/src/arch/src/x86_64/mptable.rs b/src/arch/src/x86_64/mptable.rs index 1b4511453..161528f1b 100644 --- a/src/arch/src/x86_64/mptable.rs +++ b/src/arch/src/x86_64/mptable.rs @@ -12,7 +12,7 @@ use std::slice; use libc::c_char; use arch_gen::x86::mpspec; -use vm_memory::{Address, ByteValued, Bytes, GuestAddress, GuestMemory, GuestMemoryMmap}; +use vm_memory::{Address, ByteValued, Bytes, GuestAddress, GuestMemoryBackend, GuestMemoryMmap}; // This is a workaround to the Rust enforcement specifying that any implementation of a foreign // trait (in this case `ByteValued`) where: diff --git a/src/arch/src/x86_64/regs.rs b/src/arch/src/x86_64/regs.rs index 06378c593..7c224a0d3 100644 --- a/src/arch/src/x86_64/regs.rs +++ b/src/arch/src/x86_64/regs.rs @@ -10,7 +10,7 @@ use std::mem; use super::gdt::{gdt_entry, kvm_segment_from_gdt}; use kvm_bindings::{kvm_fpu, kvm_regs, kvm_sregs}; use kvm_ioctls::VcpuFd; -use vm_memory::{Address, Bytes, GuestAddress, GuestMemory, GuestMemoryMmap}; +use vm_memory::{Address, Bytes, GuestAddress, GuestMemoryBackend, GuestMemoryMmap}; // Initial pagetables. const PML4_START: u64 = 0x9000; diff --git a/src/devices/Cargo.toml b/src/devices/Cargo.toml index c933b2bca..432fe3b9d 100644 --- a/src/devices/Cargo.toml +++ b/src/devices/Cargo.toml @@ -30,7 +30,7 @@ pw = { package = "pipewire", version = "0.8.0", optional = true } rand = "0.9.2" thiserror = { version = "2.0", optional = true } virtio-bindings = "0.2.0" -vm-memory = { version = ">=0.13", features = ["backend-mmap"] } +vm-memory = { version = "0.18", features = ["backend-mmap"] } zerocopy = { version = "0.8.26", optional = true, features = ["derive"] } krun_display = { path = "../krun_display", optional = true, features = ["bindgen_clang_runtime"] } krun_input = { path = "../krun_input", features = ["bindgen_clang_runtime"], optional = true } diff --git a/src/devices/src/virtio/balloon/device.rs b/src/devices/src/virtio/balloon/device.rs index 9b34da82b..de6c396df 100644 --- a/src/devices/src/virtio/balloon/device.rs +++ b/src/devices/src/virtio/balloon/device.rs @@ -3,7 +3,7 @@ use std::convert::TryInto; use std::io::Write; use utils::eventfd::EventFd; -use vm_memory::{ByteValued, GuestMemory, GuestMemoryMmap}; +use vm_memory::{ByteValued, GuestMemoryBackend, GuestMemoryMmap}; use super::super::{ ActivateError, ActivateResult, BalloonError, DeviceQueue, DeviceState, QueueConfig, diff --git a/src/devices/src/virtio/console/process_rx.rs b/src/devices/src/virtio/console/process_rx.rs index 9ccec8fd1..b0f9cb339 100644 --- a/src/devices/src/virtio/console/process_rx.rs +++ b/src/devices/src/virtio/console/process_rx.rs @@ -2,7 +2,7 @@ use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::{Arc, Mutex}; use std::{io, thread}; -use vm_memory::{GuestMemory, GuestMemoryError, GuestMemoryMmap, GuestMemoryRegion}; +use vm_memory::{GuestMemoryBackend, GuestMemoryError, GuestMemoryMmap}; use crate::virtio::console::console_control::ConsoleControl; use crate::virtio::console::port_io::PortInput; @@ -89,19 +89,18 @@ fn read_to_desc( input: &mut (dyn PortInput + Send), eof: &mut bool, ) -> Result { - desc.mem - .try_access(desc.len as usize, desc.addr, |_, len, addr, region| { - let mut target = region.get_slice(addr, len).unwrap(); - match input.read_volatile(&mut target) { - Ok(n) => { - if n == 0 { - *eof = true - } - Ok(n) - } - // We can't return an error otherwise we would not know how many bytes were processed before WouldBlock - Err(e) if e.kind() == io::ErrorKind::WouldBlock => Ok(0), - Err(e) => Err(GuestMemoryError::IOError(e)), + let mut total = 0; + for slice in desc.mem.get_slices(desc.addr, desc.len as usize) { + let mut slice = slice?; + match input.read_volatile(&mut slice) { + Ok(0) => { + *eof = true; + break; } - }) + Ok(n) => total += n, + Err(e) if e.kind() == io::ErrorKind::WouldBlock => break, + Err(e) => return Err(GuestMemoryError::IOError(e)), + } + } + Ok(total) } diff --git a/src/devices/src/virtio/console/process_tx.rs b/src/devices/src/virtio/console/process_tx.rs index c2c996554..bae5fc632 100644 --- a/src/devices/src/virtio/console/process_tx.rs +++ b/src/devices/src/virtio/console/process_tx.rs @@ -2,7 +2,7 @@ use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::{Arc, Mutex}; use std::{io, thread}; -use vm_memory::{GuestMemory, GuestMemoryError, GuestMemoryMmap, GuestMemoryRegion}; +use vm_memory::{GuestMemoryBackend, GuestMemoryError, GuestMemoryMmap}; use crate::virtio::console::port_io::PortOutput; use crate::virtio::{DescriptorChain, InterruptTransport, Queue}; @@ -76,22 +76,24 @@ fn write_desc_to_output( output: &mut (dyn PortOutput + Send), interrupt: &InterruptTransport, ) -> Result { - desc.mem - .try_access(desc.len as usize, desc.addr, |_, len, addr, region| { - let src = region.get_slice(addr, len).unwrap(); - loop { - log::trace!("Tx {src:?}, write_volatile {len} bytes"); - match output.write_volatile(&src) { - // try_access seem to handle partial write for us (we will be invoked again with an offset) - Ok(n) => break Ok(n), - // We can't return an error otherwise we would not know how many bytes were processed before WouldBlock - Err(e) if e.kind() == io::ErrorKind::WouldBlock => { - log::trace!("Tx wait for output (would block)"); - interrupt.signal_used_queue(); - output.wait_until_writable(); - } - Err(e) => break Err(GuestMemoryError::IOError(e)), + let mut total = 0; + for slice in desc.mem.get_slices(desc.addr, desc.len as usize) { + let slice = slice?; + loop { + log::trace!("Tx {slice:?}, write_volatile {} bytes", slice.len()); + match output.write_volatile(&slice) { + Ok(n) => { + total += n; + break; + } + Err(e) if e.kind() == io::ErrorKind::WouldBlock => { + log::trace!("Tx wait for output (would block)"); + interrupt.signal_used_queue(); + output.wait_until_writable(); } + Err(e) => return Err(GuestMemoryError::IOError(e)), } - }) + } + } + Ok(total) } diff --git a/src/devices/src/virtio/descriptor_utils.rs b/src/devices/src/virtio/descriptor_utils.rs index 1a40642f9..680b62357 100644 --- a/src/devices/src/virtio/descriptor_utils.rs +++ b/src/devices/src/virtio/descriptor_utils.rs @@ -13,8 +13,9 @@ use std::result; use crate::virtio::queue::DescriptorChain; use vm_memory::{ - Address, ByteValued, Bytes, GuestAddress, GuestMemory, GuestMemoryError, GuestMemoryMmap, - GuestMemoryRegion, Le16, Le32, Le64, VolatileMemory, VolatileMemoryError, VolatileSlice, + Address, ByteValued, Bytes, GuestAddress, GuestMemoryBackend, GuestMemoryError, + GuestMemoryMmap, GuestMemoryRegion, Le16, Le32, Le64, VolatileMemory, VolatileMemoryError, + VolatileSlice, }; use super::file_traits::{FileReadWriteAtVolatile, FileReadWriteVolatile}; diff --git a/src/devices/src/virtio/gpu/virtio_gpu.rs b/src/devices/src/virtio/gpu/virtio_gpu.rs index dc4bc99d6..c944e26ef 100644 --- a/src/devices/src/virtio/gpu/virtio_gpu.rs +++ b/src/devices/src/virtio/gpu/virtio_gpu.rs @@ -36,7 +36,7 @@ use rutabaga_gfx::{ }; #[cfg(target_os = "macos")] use utils::worker_message::WorkerMessage; -use vm_memory::{GuestAddress, GuestMemory, GuestMemoryMmap, VolatileSlice}; +use vm_memory::{GuestAddress, GuestMemoryBackend, GuestMemoryMmap, VolatileSlice}; use super::{GpuError, Result}; use crate::virtio::display::DisplayInfo; diff --git a/src/devices/src/virtio/queue.rs b/src/devices/src/virtio/queue.rs index 2fb74289d..a96ee0bae 100644 --- a/src/devices/src/virtio/queue.rs +++ b/src/devices/src/virtio/queue.rs @@ -11,8 +11,8 @@ use std::num::Wrapping; use std::sync::atomic::{fence, Ordering}; use virtio_bindings::virtio_ring::VRING_USED_F_NO_NOTIFY; use vm_memory::{ - Address, ByteValued, Bytes, GuestAddress, GuestMemory, GuestMemoryError, GuestMemoryMmap, - VolatileMemoryError, + Address, ByteValued, Bytes, GuestAddress, GuestMemoryBackend, GuestMemoryError, + GuestMemoryMmap, VolatileMemoryError, }; /// Size of used ring header: flags (u16) + idx (u16) diff --git a/src/devices/src/virtio/vsock/packet.rs b/src/devices/src/virtio/vsock/packet.rs index 9d1349cab..9ff311d55 100644 --- a/src/devices/src/virtio/vsock/packet.rs +++ b/src/devices/src/virtio/vsock/packet.rs @@ -27,7 +27,7 @@ use std::result; use nix::sys::socket::{sockaddr, AddressFamily}; use nix::sys::socket::{SockaddrLike, SockaddrStorage}; use utils::byte_order; -use vm_memory::{self, Address, GuestAddress, GuestMemory, GuestMemoryError}; +use vm_memory::{self, Address, GuestAddress, GuestMemoryBackend, GuestMemoryError}; use super::super::DescriptorChain; use super::defs; @@ -193,7 +193,7 @@ pub struct VsockPacket { buf_size: usize, } -fn get_host_address( +fn get_host_address( mem: &T, guest_addr: GuestAddress, size: usize, diff --git a/src/kernel/Cargo.toml b/src/kernel/Cargo.toml index e8e96d88c..2da4039ab 100644 --- a/src/kernel/Cargo.toml +++ b/src/kernel/Cargo.toml @@ -4,6 +4,6 @@ version = "0.1.0" edition = "2021" [dependencies] -vm-memory = { version = ">=0.13", features = ["backend-mmap"] } +vm-memory = { version = "0.18", features = ["backend-mmap"] } utils = { path = "../utils" } diff --git a/src/kernel/src/loader/mod.rs b/src/kernel/src/loader/mod.rs index 416fa5dac..28f71187f 100644 --- a/src/kernel/src/loader/mod.rs +++ b/src/kernel/src/loader/mod.rs @@ -12,7 +12,7 @@ use std::ffi::CString; use std::fmt; use super::cmdline::Error as CmdlineError; -use vm_memory::{Address, Bytes, GuestAddress, GuestMemory, GuestMemoryMmap}; +use vm_memory::{Address, Bytes, GuestAddress, GuestMemoryBackend, GuestMemoryMmap}; #[derive(Debug, Eq, PartialEq)] pub enum Error { diff --git a/src/libkrun/Cargo.toml b/src/libkrun/Cargo.toml index 0d14bc18a..f87f5aef7 100644 --- a/src/libkrun/Cargo.toml +++ b/src/libkrun/Cargo.toml @@ -42,7 +42,7 @@ kvm-bindings = { version = ">=0.11", features = ["fam-wrappers"] } kvm-ioctls = ">=0.21" aws-nitro = { path = "../aws_nitro", optional = true } nitro-enclaves = { version = "0.5.0", optional = true } -vm-memory = { version = ">=0.13", features = ["backend-mmap"] } +vm-memory = { version = "0.18", features = ["backend-mmap"] } [lib] name = "krun" diff --git a/src/smbios/Cargo.toml b/src/smbios/Cargo.toml index de9836ec0..2830a0d30 100644 --- a/src/smbios/Cargo.toml +++ b/src/smbios/Cargo.toml @@ -4,4 +4,4 @@ version = "0.1.0" edition = "2021" [dependencies] -vm-memory = { version = ">=0.13", features = ["backend-mmap"] } +vm-memory = { version = "0.18", features = ["backend-mmap"] } diff --git a/src/vmm/Cargo.toml b/src/vmm/Cargo.toml index ecf441697..1ae7d61f3 100644 --- a/src/vmm/Cargo.toml +++ b/src/vmm/Cargo.toml @@ -21,10 +21,10 @@ aws-nitro = [] crossbeam-channel = ">=0.5.15" flate2 = "1.0.35" libc = ">=0.2.39" -linux-loader = { version = "0.13.0", features = ["bzimage", "elf", "pe"] } +linux-loader = { git = "https://github.com/d-e-s-o/linux-loader.git", branch = "topic/vm-memory-0.18", features = ["bzimage", "elf", "pe"] } log = "0.4.0" nix = { version = "0.30.1", features = ["fs", "term"] } -vm-memory = { version = ">=0.13", features = ["backend-mmap"] } +vm-memory = { version = "0.18", features = ["backend-mmap"] } vmm-sys-util = ">=0.14" krun_display = { path = "../krun_display", optional = true, features = ["bindgen_clang_runtime"] } krun_input = { path = "../krun_input", optional = true, features = ["bindgen_clang_runtime"] } diff --git a/src/vmm/src/builder.rs b/src/vmm/src/builder.rs index 9dc1abe9b..1248895a1 100644 --- a/src/vmm/src/builder.rs +++ b/src/vmm/src/builder.rs @@ -94,7 +94,7 @@ use vm_memory::mmap::MmapRegion; use vm_memory::Address; use vm_memory::Bytes; #[cfg(not(feature = "aws-nitro"))] -use vm_memory::GuestMemory; +use vm_memory::GuestMemoryBackend; #[cfg(all(target_arch = "x86_64", not(feature = "tee")))] use vm_memory::GuestRegionMmap; use vm_memory::{GuestAddress, GuestMemoryMmap}; @@ -125,7 +125,7 @@ pub enum StartMicrovmError { /// Cannot read firmware contents from file. FirmwareRead(io::Error), /// Memory regions are overlapping or mmap fails. - GuestMemoryMmap(vm_memory::Error), + GuestMemoryMmap(String), /// The BZIP2 decoder couldn't decompress the kernel. ImageBz2Decoder(io::Error), /// Cannot find compressed kernel in file. @@ -1339,9 +1339,13 @@ fn load_payload( guest_mem .insert_region(Arc::new( GuestRegionMmap::new(kernel_region, GuestAddress(kernel_guest_addr)) - .map_err(StartMicrovmError::GuestMemoryMmap)?, + .ok_or_else(|| { + StartMicrovmError::GuestMemoryMmap( + "Failed to create GuestRegionMmap".to_string(), + ) + })?, )) - .map_err(StartMicrovmError::GuestMemoryMmap)?, + .map_err(|e| StartMicrovmError::GuestMemoryMmap(format!("{e:?}")))?, GuestAddress(kernel_entry_addr), None, None, @@ -1500,7 +1504,7 @@ pub fn create_guest_memory( arch_mem_regions.extend(shm_manager.regions()); let guest_mem = GuestMemoryMmap::from_ranges(&arch_mem_regions) - .map_err(StartMicrovmError::GuestMemoryMmap)?; + .map_err(|e| StartMicrovmError::GuestMemoryMmap(format!("{e:?}")))?; let (guest_mem, entry_addr, initrd_config, cmdline) = load_payload(vm_resources, guest_mem, &arch_mem_info, payload)?; diff --git a/src/vmm/src/linux/tee/amdsnp/mod.rs b/src/vmm/src/linux/tee/amdsnp/mod.rs index 1474a0be8..78c0bdd6d 100644 --- a/src/vmm/src/linux/tee/amdsnp/mod.rs +++ b/src/vmm/src/linux/tee/amdsnp/mod.rs @@ -13,7 +13,7 @@ use launch::{error::FirmwareError, firmware::Firmware, *}; use kvm_bindings::{kvm_enc_region, CpuId, KVM_CPUID_FLAG_SIGNIFCANT_INDEX}; use kvm_ioctls::VmFd; use vm_memory::{ - Bytes, GuestAddress, GuestMemory, GuestMemoryMmap, GuestMemoryRegion, GuestRegionMmap, + Bytes, GuestAddress, GuestMemoryBackend, GuestMemoryMmap, GuestMemoryRegion, GuestRegionMmap, }; #[derive(Debug)] diff --git a/src/vmm/src/linux/vstate.rs b/src/vmm/src/linux/vstate.rs index 02282b668..317126724 100644 --- a/src/vmm/src/linux/vstate.rs +++ b/src/vmm/src/linux/vstate.rs @@ -64,8 +64,8 @@ use utils::sm::StateMachine; #[cfg(feature = "tee")] use utils::worker_message::{MemoryProperties, WorkerMessage}; use vm_memory::{ - Address, GuestAddress, GuestMemory, GuestMemoryError, GuestMemoryMmap, GuestMemoryRegion, - GuestRegionMmap, + Address, GuestAddress, GuestMemoryBackend, GuestMemoryError, GuestMemoryMmap, + GuestMemoryRegion, GuestRegionMmap, }; #[cfg(feature = "amd-sev")] diff --git a/src/vmm/src/macos/vstate.rs b/src/vmm/src/macos/vstate.rs index f4c9ccabf..616f3eca8 100644 --- a/src/vmm/src/macos/vstate.rs +++ b/src/vmm/src/macos/vstate.rs @@ -24,7 +24,7 @@ use devices::legacy::VcpuList; use hvf::{HvfVcpu, HvfVm, VcpuExit, Vcpus}; use utils::eventfd::EventFd; use vm_memory::{ - Address, GuestAddress, GuestMemory, GuestMemoryError, GuestMemoryMmap, GuestMemoryRegion, + Address, GuestAddress, GuestMemoryBackend, GuestMemoryError, GuestMemoryMmap, GuestMemoryRegion, }; /// Errors associated with the wrappers over KVM ioctls. diff --git a/src/vmm/src/worker.rs b/src/vmm/src/worker.rs index d0131b994..2f14ac1f4 100644 --- a/src/vmm/src/worker.rs +++ b/src/vmm/src/worker.rs @@ -16,7 +16,7 @@ use libc::{fallocate, madvise, FALLOC_FL_KEEP_SIZE, FALLOC_FL_PUNCH_HOLE, MADV_D use std::ffi::c_void; #[cfg(feature = "tee")] use vm_memory::{ - guest_memory::GuestMemory, Address, GuestAddress, GuestMemoryRegion, MemoryRegionAddress, + guest_memory::GuestMemoryBackend, Address, GuestAddress, GuestMemoryRegion, MemoryRegionAddress, }; pub fn start_worker_thread( From c8346765197b0901652f335ed706d2235ea3bfde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20M=C3=BCller?= Date: Sat, 7 Mar 2026 05:27:25 -0800 Subject: [PATCH 2/2] libkrun: Produce a proper Rust library MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Produce a proper Rust library to avoid the need for C library installation as well as binding generation/definition. Basically, we can now reference the crate via Cargo.toml: [dependencies] libkrun = ... instead of having to rely on constructs like: #[link(name = "krun")] extern "C" { pub fn krun_create_ctx() -> i32; ... } Signed-off-by: Daniel Müller --- src/libkrun/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libkrun/Cargo.toml b/src/libkrun/Cargo.toml index f87f5aef7..598d8c1a3 100644 --- a/src/libkrun/Cargo.toml +++ b/src/libkrun/Cargo.toml @@ -46,4 +46,4 @@ vm-memory = { version = "0.18", features = ["backend-mmap"] } [lib] name = "krun" -crate-type = ["cdylib"] +crate-type = ["cdylib", "lib"]