Skip to content

Commit b3c9856

Browse files
committed
dm: Add initial device model
The device model is a user mode program which manages VM's life cycles and handles various vmexits events. The initial version just calls exit() syscall without doing anything else. Signed-off-by: Vijay Dhanraj <[email protected]> Signed-off-by: Chuanxiao Dong <[email protected]>
1 parent 0cb9a17 commit b3c9856

10 files changed

+66
-3
lines changed

Cargo.lock

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ members = [
2323
"user/lib",
2424
# Init user-space module
2525
"user/init",
26+
# device model module
27+
"user/dm",
2628
]
2729

2830

@@ -38,6 +40,7 @@ syscall = { path = "syscall" }
3840
packit = { path = "packit" }
3941
userlib = { path = "user/lib" }
4042
userinit = { path = "user/init" }
43+
dm = { path = "user/dm" }
4144

4245
# crates.io
4346
aes-gcm = { version = "0.10.3", default-features = false }

Makefile

+3-3
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ bin/coconut-test-vanadium.igvm: $(IGVMBUILDER) $(IGVMMEASURE) bin/stage1-trampol
9292
$(IGVMMEASURE) --check-kvm --native-zero $@ measure
9393

9494
test:
95-
cargo test ${CARGO_ARGS} ${SVSM_ARGS_TEST} --workspace --exclude=user* --target=x86_64-unknown-linux-gnu
95+
cargo test ${CARGO_ARGS} ${SVSM_ARGS_TEST} --workspace --exclude=user* --exclude=dm --target=x86_64-unknown-linux-gnu
9696

9797
test-igvm: bin/coconut-test-qemu.igvm bin/coconut-test-hyperv.igvm bin/coconut-test-vanadium.igvm
9898

@@ -176,9 +176,9 @@ bin/svsm-test.bin: bin/stage1-test
176176

177177
clippy:
178178
cargo clippy --workspace --all-features --exclude packit --exclude svsm-fuzz --exclude igvmbuilder --exclude igvmmeasure -- -D warnings
179-
cargo clippy --workspace --all-features --exclude packit --exclude svsm-fuzz --exclude svsm --exclude 'user*' --target=x86_64-unknown-linux-gnu -- -D warnings
179+
cargo clippy --workspace --all-features --exclude packit --exclude svsm-fuzz --exclude svsm --exclude 'user*' --exclude 'dm' --target=x86_64-unknown-linux-gnu -- -D warnings
180180
RUSTFLAGS="--cfg fuzzing" cargo clippy --package svsm-fuzz --all-features --target=x86_64-unknown-linux-gnu -- -D warnings
181-
cargo clippy --workspace --all-features --exclude packit --exclude 'user*' --tests --target=x86_64-unknown-linux-gnu -- -D warnings
181+
cargo clippy --workspace --all-features --exclude packit --exclude 'user*' --exclude 'dm' --tests --target=x86_64-unknown-linux-gnu -- -D warnings
182182

183183
clean:
184184
cargo clean

configs/all-targets.json

+3
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@
5353
"modules": {
5454
"userinit": {
5555
"path": "/init"
56+
},
57+
"dm": {
58+
"path": "/dm"
5659
}
5760
}
5861
}

configs/hyperv-target.json

+3
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@
3232
"modules": {
3333
"userinit": {
3434
"path": "/init"
35+
},
36+
"dm": {
37+
"path": "/dm"
3538
}
3639
}
3740
}

configs/qemu-target.json

+3
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@
3434
"modules": {
3535
"userinit": {
3636
"path": "/init"
37+
},
38+
"dm": {
39+
"path": "/dm"
3740
}
3841
}
3942
}

configs/vanadium-target.json

+3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@
3535
"modules": {
3636
"userinit": {
3737
"path": "/init"
38+
},
39+
"dm": {
40+
"path": "/dm"
3841
}
3942
}
4043
}

user/dm/Cargo.toml

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[package]
2+
name = "dm"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
userlib.workspace = true
8+
syscall = { path = "../../syscall" }
9+
10+
[lints]
11+
workspace = true

user/dm/build.rs

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
fn main() {
2+
println!("cargo:rustc-link-arg=-Tuser/lib/module.lds");
3+
println!("cargo:rustc-link-arg=-no-pie");
4+
}

user/dm/src/main.rs

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// SPDX-License-Identifier: MIT
2+
//
3+
// Copyright (c) 2024 Intel Corporation.
4+
//
5+
// Author: Chuanxiao Dong <[email protected]>
6+
7+
#![no_std]
8+
#![no_main]
9+
10+
use core::panic::PanicInfo;
11+
use syscall::exit;
12+
13+
fn dm_exit() -> ! {
14+
exit(0);
15+
}
16+
17+
#[no_mangle]
18+
pub extern "C" fn _start() -> ! {
19+
dm_exit();
20+
}
21+
22+
#[panic_handler]
23+
fn panic(_info: &PanicInfo<'_>) -> ! {
24+
dm_exit();
25+
}

0 commit comments

Comments
 (0)