Skip to content

Commit 6d2d716

Browse files
committed
Use vm-memory 0.17
The existing version specification for the vm-memory dependency is wrong: it includes incompatible versions that, when used, will break the build. 0.18, for example does not build. Neither does 0.17. We cannot go to 0.18, because linux-loader folks are reluctant to update to 0.18. Hence, move the entire workspace to using vm-memory 0.17. Signed-off-by: Daniel Müller <deso@posteo.net>
1 parent 6e590b5 commit 6d2d716

14 files changed

Lines changed: 354 additions & 530 deletions

File tree

Cargo.lock

Lines changed: 287 additions & 468 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/arch/Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@ efi = []
1212

1313
[dependencies]
1414
libc = ">=0.2.39"
15-
vm-memory = { version = ">=0.13", features = ["backend-mmap"] }
16-
vmm-sys-util = ">= 0.14"
15+
vm-memory = { version = "0.17", features = ["backend-mmap"] }
16+
vmm-sys-util = "0.14"
1717

1818
arch_gen = { path = "../arch_gen" }
1919
smbios = { path = "../smbios" }
2020
utils = { path = "../utils" }
2121

2222
[target.'cfg(target_os = "linux")'.dependencies]
23-
kvm-bindings = { version = ">=0.11", features = ["fam-wrappers"] }
24-
kvm-ioctls = ">=0.21"
23+
kvm-bindings = { version = "0.12", features = ["fam-wrappers"] }
24+
kvm-ioctls = "0.22"
2525
tdx = { version = "0.1.0", optional = true }
2626

2727
[dev-dependencies]

src/cpuid/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ edition = "2021"
88
tdx = []
99

1010
[dependencies]
11-
vmm-sys-util = ">= 0.14"
11+
vmm-sys-util = "0.14"
1212

1313
[target.'cfg(target_os = "linux")'.dependencies]
14-
kvm-bindings = { version = ">=0.11", features = ["fam-wrappers"] }
15-
kvm-ioctls = ">=0.21"
14+
kvm-bindings = { version = "0.12", features = ["fam-wrappers"] }
15+
kvm-ioctls = "0.22"

src/devices/Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ pw = { package = "pipewire", version = "0.8.0", optional = true }
3030
rand = "0.9.2"
3131
thiserror = { version = "2.0", optional = true }
3232
virtio-bindings = "0.2.0"
33-
vm-memory = { version = ">=0.13", features = ["backend-mmap"] }
33+
vm-memory = { version = "0.17", features = ["backend-mmap"] }
3434
zerocopy = { version = "0.8.26", optional = true, features = ["derive"] }
3535
krun_display = { path = "../krun_display", optional = true, features = ["bindgen_clang_runtime"] }
3636
krun_input = { path = "../krun_input", features = ["bindgen_clang_runtime"], optional = true }
@@ -39,7 +39,7 @@ arch = { path = "../arch" }
3939
utils = { path = "../utils" }
4040
polly = { path = "../polly" }
4141
rutabaga_gfx = { path = "../rutabaga_gfx", features = ["virgl_renderer", "virgl_renderer_next"], optional = true }
42-
imago = { version = "0.2.1", features = ["sync-wrappers", "vm-memory"] }
42+
imago = { version = "0.2.2", features = ["sync-wrappers", "vm-memory"] }
4343

4444
[target.'cfg(target_os = "macos")'.dependencies]
4545
hvf = { path = "../hvf" }
@@ -48,8 +48,8 @@ lru = ">=0.9"
4848
[target.'cfg(target_os = "linux")'.dependencies]
4949
rutabaga_gfx = { path = "../rutabaga_gfx", features = ["x"], optional = true }
5050
caps = "0.5.5"
51-
kvm-bindings = { version = ">=0.11", features = ["fam-wrappers"] }
52-
kvm-ioctls = ">=0.21"
51+
kvm-bindings = { version = "0.12", features = ["fam-wrappers"] }
52+
kvm-ioctls = "0.22"
5353

5454
[target.'cfg(any(target_arch = "aarch64", target_arch = "riscv64"))'.dependencies]
5555
vm-fdt = ">= 0.2.0"

src/devices/src/virtio/console/process_rx.rs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::sync::atomic::{AtomicBool, Ordering};
22
use std::sync::{Arc, Mutex};
33
use std::{io, thread};
44

5-
use vm_memory::{GuestMemory, GuestMemoryError, GuestMemoryMmap, GuestMemoryRegion};
5+
use vm_memory::{GuestMemory, GuestMemoryError, GuestMemoryMmap};
66

77
use crate::virtio::console::console_control::ConsoleControl;
88
use crate::virtio::console::port_io::PortInput;
@@ -89,19 +89,18 @@ fn read_to_desc(
8989
input: &mut (dyn PortInput + Send),
9090
eof: &mut bool,
9191
) -> Result<usize, GuestMemoryError> {
92-
desc.mem
93-
.try_access(desc.len as usize, desc.addr, |_, len, addr, region| {
94-
let mut target = region.get_slice(addr, len).unwrap();
95-
match input.read_volatile(&mut target) {
96-
Ok(n) => {
97-
if n == 0 {
98-
*eof = true
99-
}
100-
Ok(n)
101-
}
102-
// We can't return an error otherwise we would not know how many bytes were processed before WouldBlock
103-
Err(e) if e.kind() == io::ErrorKind::WouldBlock => Ok(0),
104-
Err(e) => Err(GuestMemoryError::IOError(e)),
92+
let mut total = 0;
93+
for slice in desc.mem.get_slices(desc.addr, desc.len as usize) {
94+
let mut slice = slice?;
95+
match input.read_volatile(&mut slice) {
96+
Ok(0) => {
97+
*eof = true;
98+
break;
10599
}
106-
})
100+
Ok(n) => total += n,
101+
Err(e) if e.kind() == io::ErrorKind::WouldBlock => break,
102+
Err(e) => return Err(GuestMemoryError::IOError(e)),
103+
}
104+
}
105+
Ok(total)
107106
}

src/devices/src/virtio/console/process_tx.rs

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::sync::atomic::{AtomicBool, Ordering};
22
use std::sync::{Arc, Mutex};
33
use std::{io, thread};
44

5-
use vm_memory::{GuestMemory, GuestMemoryError, GuestMemoryMmap, GuestMemoryRegion};
5+
use vm_memory::{GuestMemory, GuestMemoryError, GuestMemoryMmap};
66

77
use crate::virtio::console::port_io::PortOutput;
88
use crate::virtio::{DescriptorChain, InterruptTransport, Queue};
@@ -76,22 +76,24 @@ fn write_desc_to_output(
7676
output: &mut (dyn PortOutput + Send),
7777
interrupt: &InterruptTransport,
7878
) -> Result<usize, GuestMemoryError> {
79-
desc.mem
80-
.try_access(desc.len as usize, desc.addr, |_, len, addr, region| {
81-
let src = region.get_slice(addr, len).unwrap();
82-
loop {
83-
log::trace!("Tx {src:?}, write_volatile {len} bytes");
84-
match output.write_volatile(&src) {
85-
// try_access seem to handle partial write for us (we will be invoked again with an offset)
86-
Ok(n) => break Ok(n),
87-
// We can't return an error otherwise we would not know how many bytes were processed before WouldBlock
88-
Err(e) if e.kind() == io::ErrorKind::WouldBlock => {
89-
log::trace!("Tx wait for output (would block)");
90-
interrupt.signal_used_queue();
91-
output.wait_until_writable();
92-
}
93-
Err(e) => break Err(GuestMemoryError::IOError(e)),
79+
let mut total = 0;
80+
for slice in desc.mem.get_slices(desc.addr, desc.len as usize) {
81+
let slice = slice?;
82+
loop {
83+
log::trace!("Tx {slice:?}, write_volatile {} bytes", slice.len());
84+
match output.write_volatile(&slice) {
85+
Ok(n) => {
86+
total += n;
87+
break;
88+
}
89+
Err(e) if e.kind() == io::ErrorKind::WouldBlock => {
90+
log::trace!("Tx wait for output (would block)");
91+
interrupt.signal_used_queue();
92+
output.wait_until_writable();
9493
}
94+
Err(e) => return Err(GuestMemoryError::IOError(e)),
9595
}
96-
})
96+
}
97+
}
98+
Ok(total)
9799
}

src/kernel/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ version = "0.1.0"
44
edition = "2021"
55

66
[dependencies]
7-
vm-memory = { version = ">=0.13", features = ["backend-mmap"] }
7+
vm-memory = { version = "0.17", features = ["backend-mmap"] }
88

99
utils = { path = "../utils" }

src/libkrun/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ rand = "0.9.2"
3838
hvf = { path = "../hvf" }
3939

4040
[target.'cfg(target_os = "linux")'.dependencies]
41-
kvm-bindings = { version = ">=0.11", features = ["fam-wrappers"] }
42-
kvm-ioctls = ">=0.21"
41+
kvm-bindings = { version = "0.12", features = ["fam-wrappers"] }
42+
kvm-ioctls = "0.22"
4343
aws-nitro = { path = "../aws_nitro", optional = true }
4444
nitro-enclaves = { version = "0.5.0", optional = true }
45-
vm-memory = { version = ">=0.13", features = ["backend-mmap"] }
45+
vm-memory = { version = "0.17", features = ["backend-mmap"] }
4646

4747
[lib]
4848
name = "krun"

src/rutabaga_gfx/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ remain = "0.2"
2626
thiserror = "1.0.23"
2727
zerocopy = { version = "0.8.26", features = ["derive"] }
2828
log = "0.4"
29-
vmm-sys-util = ">=0.14"
29+
vmm-sys-util = "0.14"
3030

3131
[target.'cfg(unix)'.dependencies]
3232
nix = { version = "0.30.1", features = ["event", "feature", "fs", "mman", "socket", "uio", "ioctl"] }

0 commit comments

Comments
 (0)