Compare commits
7 Commits
ded8ab8110
...
890309853e
Author | SHA1 | Date |
---|---|---|
Jinank Jain | 890309853e | |
Rob Bradford | 7966925c1c | |
Bo Chen | f409c4b63b | |
Jinank Jain | 371e684edf | |
Jinank Jain | 917bcd0291 | |
Jinank Jain | ff13a94a78 | |
Jinank Jain | f35b84b03b |
|
@ -0,0 +1,22 @@
|
|||
name: Cloud Hypervisor Tests (Metrics)
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Tests (Metrics)
|
||||
runs-on: jammy-metrics
|
||||
env:
|
||||
METRICS_PUBLISH_KEY: ${{ secrets.METRICS_PUBLISH_KEY }}
|
||||
steps:
|
||||
- name: Code checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Run metrics tests
|
||||
timeout-minutes: 60
|
||||
run: scripts/dev_cli.sh tests --metrics -- -- --report-file /root/workloads/metrics.json
|
||||
- name: Upload metrics report
|
||||
run: 'curl -X PUT https://ch-metrics.azurewebsites.net/api/publishmetrics -H "x-functions-key: $METRICS_PUBLISH_KEY" -T ~/workloads/metrics.json'
|
|
@ -0,0 +1,28 @@
|
|||
name: Cloud Hypervisor Tests (Rate-Limiter)
|
||||
on: [merge_group, pull_request]
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Tests (Rate-Limiter)
|
||||
runs-on: ${{ github.event_name == 'pull_request' && 'ubuntu-latest' || 'jammy-rate-limiter' }}
|
||||
env:
|
||||
AUTH_DOWNLOAD_TOKEN: ${{ secrets.AUTH_DOWNLOAD_TOKEN }}
|
||||
steps:
|
||||
- name: Fix workspace permissions
|
||||
if: ${{ github.event_name != 'pull_request' }}
|
||||
run: sudo chown -R github-runner:github-runner ${GITHUB_WORKSPACE}
|
||||
- name: Code checkout
|
||||
if: ${{ github.event_name != 'pull_request' }}
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Run rate-limiter integration tests
|
||||
if: ${{ github.event_name != 'pull_request' }}
|
||||
timeout-minutes: 10
|
||||
run: scripts/dev_cli.sh tests --integration-rate-limiter
|
||||
- name: Skipping build for PR
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
run: echo "Skipping build for PR"
|
File diff suppressed because it is too large
Load Diff
14
Cargo.toml
14
Cargo.toml
|
@ -29,20 +29,20 @@ strip = false
|
|||
debug = true
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.79"
|
||||
anyhow = "1.0.81"
|
||||
api_client = { path = "api_client" }
|
||||
clap = { version = "4.5.1", features = ["string"] }
|
||||
clap = { version = "4.5.4", features = ["string"] }
|
||||
dhat = { version = "0.3.3", optional = true }
|
||||
epoll = "4.3.3"
|
||||
event_monitor = { path = "event_monitor" }
|
||||
hypervisor = { path = "hypervisor" }
|
||||
libc = "0.2.153"
|
||||
log = { version = "0.4.20", features = ["std"] }
|
||||
log = { version = "0.4.21", features = ["std"] }
|
||||
option_parser = { path = "option_parser" }
|
||||
seccompiler = "0.4.0"
|
||||
serde_json = "1.0.114"
|
||||
serde_json = "1.0.115"
|
||||
signal-hook = "0.3.17"
|
||||
thiserror = "1.0.52"
|
||||
thiserror = "1.0.58"
|
||||
tpm = { path = "tpm"}
|
||||
tracer = { path = "tracer" }
|
||||
vmm = { path = "vmm" }
|
||||
|
@ -56,10 +56,10 @@ kvm-bindings = { git = "https://github.com/cloud-hypervisor/kvm-bindings", branc
|
|||
versionize_derive = { git = "https://github.com/cloud-hypervisor/versionize_derive", branch = "ch-0.1.6" }
|
||||
|
||||
[dev-dependencies]
|
||||
dirs = "5.0.0"
|
||||
dirs = "5.0.1"
|
||||
net_util = { path = "net_util" }
|
||||
once_cell = "1.19.0"
|
||||
serde_json = "1.0.114"
|
||||
serde_json = "1.0.115"
|
||||
test_infra = { path = "test_infra" }
|
||||
wait-timeout = "0.2.0"
|
||||
|
||||
|
|
|
@ -10,15 +10,15 @@ sev_snp = []
|
|||
tdx = []
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.79"
|
||||
anyhow = "1.0.81"
|
||||
byteorder = "1.5.0"
|
||||
hypervisor = { path = "../hypervisor" }
|
||||
libc = "0.2.153"
|
||||
linux-loader = { version = "0.11.0", features = ["elf", "bzimage", "pe"] }
|
||||
log = "0.4.20"
|
||||
serde = { version = "1.0.196", features = ["rc", "derive"] }
|
||||
thiserror = "1.0.52"
|
||||
uuid = "1.3.4"
|
||||
log = "0.4.21"
|
||||
serde = { version = "1.0.197", features = ["rc", "derive"] }
|
||||
thiserror = "1.0.58"
|
||||
uuid = "1.8.0"
|
||||
versionize = "0.2.0"
|
||||
versionize_derive = "0.1.6"
|
||||
vm-memory = { version = "0.14.1", features = ["backend-mmap", "backend-bitmap"] }
|
||||
|
@ -26,5 +26,5 @@ vm-migration = { path = "../vm-migration" }
|
|||
vmm-sys-util = { version = "0.12.1", features = ["with-serde"] }
|
||||
|
||||
[target.'cfg(target_arch = "aarch64")'.dependencies]
|
||||
fdt_parser = { version = "0.1.4", package = "fdt" }
|
||||
fdt_parser = { version = "0.1.5", package = "fdt" }
|
||||
vm-fdt = { git = "https://github.com/rust-vmm/vm-fdt", branch = "main" }
|
||||
|
|
|
@ -11,16 +11,16 @@ io_uring = ["dep:io-uring"]
|
|||
[dependencies]
|
||||
byteorder = "1.5.0"
|
||||
crc-any = "2.4.4"
|
||||
io-uring = { version = "0.6.2", optional = true }
|
||||
io-uring = { version = "0.6.3", optional = true }
|
||||
libc = "0.2.153"
|
||||
log = "0.4.20"
|
||||
remain = "0.2.11"
|
||||
log = "0.4.21"
|
||||
remain = "0.2.13"
|
||||
smallvec = "1.13.2"
|
||||
thiserror = "1.0.52"
|
||||
uuid = { version = "1.3.4", features = ["v4"] }
|
||||
thiserror = "1.0.58"
|
||||
uuid = { version = "1.8.0", features = ["v4"] }
|
||||
versionize = "0.2.0"
|
||||
versionize_derive = "0.1.6"
|
||||
virtio-bindings = { version = "0.2.0", features = ["virtio-v5_0_0"] }
|
||||
virtio-bindings = { version = "0.2.2", features = ["virtio-v5_0_0"] }
|
||||
virtio-queue = "0.11.0"
|
||||
vm-memory = { version = "0.14.1", features = ["backend-mmap", "backend-atomic", "backend-bitmap"] }
|
||||
vm-virtio = { path = "../vm-virtio" }
|
||||
|
|
|
@ -6,16 +6,16 @@ edition = "2021"
|
|||
|
||||
[dependencies]
|
||||
acpi_tables = { git = "https://github.com/rust-vmm/acpi_tables", branch = "main" }
|
||||
anyhow = "1.0.79"
|
||||
anyhow = "1.0.81"
|
||||
arch = { path = "../arch" }
|
||||
bitflags = "2.4.2"
|
||||
bitflags = "2.5.0"
|
||||
byteorder = "1.5.0"
|
||||
event_monitor = { path = "../event_monitor" }
|
||||
hypervisor = { path = "../hypervisor" }
|
||||
libc = "0.2.153"
|
||||
log = "0.4.20"
|
||||
log = "0.4.21"
|
||||
pci = { path = "../pci" }
|
||||
thiserror = "1.0.52"
|
||||
thiserror = "1.0.58"
|
||||
tpm = { path = "../tpm" }
|
||||
versionize = "0.2.0"
|
||||
versionize_derive = "0.1.6"
|
||||
|
|
|
@ -8,5 +8,5 @@ edition = "2021"
|
|||
flume = "0.10.14"
|
||||
libc = "0.2.153"
|
||||
once_cell = "1.19.0"
|
||||
serde = { version = "1.0.196", features = ["rc", "derive"] }
|
||||
serde_json = "1.0.114"
|
||||
serde = { version = "1.0.197", features = ["rc", "derive"] }
|
||||
serde_json = "1.0.115"
|
||||
|
|
|
@ -5,7 +5,7 @@ version = 3
|
|||
[[package]]
|
||||
name = "acpi_tables"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/rust-vmm/acpi_tables?branch=main#1a733bf690ccc10bdfeacad33e3c9f6cce0008fd"
|
||||
source = "git+https://github.com/rust-vmm/acpi_tables?branch=main#ca1a473fe73cdd8eb49c1449faad7aaac06f32c2"
|
||||
dependencies = [
|
||||
"zerocopy",
|
||||
]
|
||||
|
@ -128,9 +128,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
|||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.4.2"
|
||||
version = "2.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
|
||||
checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
|
||||
|
||||
[[package]]
|
||||
name = "block"
|
||||
|
@ -200,7 +200,7 @@ dependencies = [
|
|||
"anstream",
|
||||
"anstyle",
|
||||
"clap_lex",
|
||||
"strsim 0.11.0",
|
||||
"strsim 0.11.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -300,7 +300,7 @@ dependencies = [
|
|||
"proc-macro2",
|
||||
"quote",
|
||||
"strsim 0.10.0",
|
||||
"syn 2.0.47",
|
||||
"syn 2.0.58",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -311,7 +311,7 @@ checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f"
|
|||
dependencies = [
|
||||
"darling_core",
|
||||
"quote",
|
||||
"syn 2.0.47",
|
||||
"syn 2.0.58",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -327,7 +327,7 @@ dependencies = [
|
|||
"acpi_tables",
|
||||
"anyhow",
|
||||
"arch",
|
||||
"bitflags 2.4.2",
|
||||
"bitflags 2.5.0",
|
||||
"byteorder",
|
||||
"event_monitor",
|
||||
"hypervisor",
|
||||
|
@ -351,7 +351,7 @@ version = "4.3.3"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "74351c3392ea1ff6cd2628e0042d268ac2371cb613252ff383b6dfa50d22fa79"
|
||||
dependencies = [
|
||||
"bitflags 2.4.2",
|
||||
"bitflags 2.5.0",
|
||||
"libc",
|
||||
]
|
||||
|
||||
|
@ -405,9 +405,9 @@ checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
|
|||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.2.12"
|
||||
version = "0.2.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
|
||||
checksum = "a06fddc2749e0528d2813f95e050e87e52c8cbbae56223b9babf73b3e53b0cc6"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"js-sys",
|
||||
|
@ -490,7 +490,7 @@ version = "0.16.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9002dff009755414f22b962ec6ae6980b07d6d8b06e5297b1062019d72bd6a8c"
|
||||
dependencies = [
|
||||
"bitflags 2.4.2",
|
||||
"bitflags 2.5.0",
|
||||
"kvm-bindings",
|
||||
"libc",
|
||||
"vmm-sys-util",
|
||||
|
@ -634,7 +634,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.47",
|
||||
"syn 2.0.58",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -674,7 +674,7 @@ checksum = "ad9f2390298a947ee0aa6073d440e221c0726188cfbcdf9604addb6ee393eb4a"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.47",
|
||||
"syn 2.0.58",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -715,7 +715,7 @@ checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.47",
|
||||
"syn 2.0.58",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -749,7 +749,7 @@ dependencies = [
|
|||
"darling",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.47",
|
||||
"syn 2.0.58",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -798,9 +798,9 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
|||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.11.0"
|
||||
version = "0.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01"
|
||||
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
|
@ -815,9 +815,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.47"
|
||||
version = "2.0.58"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1726efe18f42ae774cc644f330953a5e7b3c3003d3edcecf18850fe9d4dd9afb"
|
||||
checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -826,22 +826,22 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "1.0.56"
|
||||
version = "1.0.58"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad"
|
||||
checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297"
|
||||
dependencies = [
|
||||
"thiserror-impl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror-impl"
|
||||
version = "1.0.56"
|
||||
version = "1.0.58"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471"
|
||||
checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.47",
|
||||
"syn 2.0.58",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -963,7 +963,7 @@ version = "0.10.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2b64e816d0d49769fbfaa1494eb77cc2a3ddc526ead05c7f922cb7d64106286f"
|
||||
dependencies = [
|
||||
"bitflags 2.4.2",
|
||||
"bitflags 2.5.0",
|
||||
"libc",
|
||||
"vm-memory",
|
||||
"vmm-sys-util",
|
||||
|
@ -1045,8 +1045,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "vm-fdt"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/rust-vmm/vm-fdt?branch=main#c5a99ab71b130435927d19b50c85fcd5ce904a8c"
|
||||
version = "0.3.0"
|
||||
source = "git+https://github.com/rust-vmm/vm-fdt?branch=main#982fb8d9c8cd7f53520d7e304b39ff307fa3a641"
|
||||
|
||||
[[package]]
|
||||
name = "vm-memory"
|
||||
|
@ -1090,7 +1090,7 @@ dependencies = [
|
|||
"anyhow",
|
||||
"arc-swap",
|
||||
"arch",
|
||||
"bitflags 2.4.2",
|
||||
"bitflags 2.5.0",
|
||||
"block",
|
||||
"cfg-if",
|
||||
"clap",
|
||||
|
@ -1170,7 +1170,7 @@ dependencies = [
|
|||
"once_cell",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.47",
|
||||
"syn 2.0.58",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
|
@ -1192,7 +1192,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.47",
|
||||
"syn 2.0.58",
|
||||
"wasm-bindgen-backend",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
@ -1309,5 +1309,5 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.47",
|
||||
"syn 2.0.58",
|
||||
]
|
||||
|
|
|
@ -14,8 +14,8 @@ igvm = []
|
|||
[dependencies]
|
||||
block = { path = "../block" }
|
||||
devices = { path = "../devices" }
|
||||
epoll = "4.3.1"
|
||||
libc = "0.2.152"
|
||||
epoll = "4.3.3"
|
||||
libc = "0.2.153"
|
||||
libfuzzer-sys = "0.4.7"
|
||||
linux-loader = { version = "0.11.0", features = ["elf", "bzimage", "pe"] }
|
||||
micro_http = { git = "https://github.com/firecracker-microvm/micro-http", branch = "main" }
|
||||
|
|
|
@ -12,28 +12,28 @@ sev_snp = ["igvm_parser", "igvm_defs"]
|
|||
tdx = []
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.79"
|
||||
anyhow = "1.0.81"
|
||||
byteorder = "1.5.0"
|
||||
igvm_defs = { git = "https://github.com/microsoft/igvm", branch = "main", package = "igvm_defs", optional = true }
|
||||
igvm_parser = { git = "https://github.com/microsoft/igvm", branch = "main", package = "igvm", optional = true }
|
||||
libc = "0.2.153"
|
||||
log = "0.4.20"
|
||||
log = "0.4.21"
|
||||
kvm-ioctls = { version = "0.16.0", optional = true }
|
||||
kvm-bindings = { git = "https://github.com/cloud-hypervisor/kvm-bindings", branch = "ch-v0.7.0", features = ["with-serde", "fam-wrappers"], optional = true }
|
||||
mshv-bindings = { git = "https://github.com/rust-vmm/mshv", branch = "main", features = ["with-serde", "fam-wrappers"], optional = true }
|
||||
mshv-ioctls = { git = "https://github.com/rust-vmm/mshv", branch = "main", optional = true}
|
||||
serde = { version = "1.0.196", features = ["rc", "derive"] }
|
||||
serde = { version = "1.0.197", features = ["rc", "derive"] }
|
||||
serde_with = { version = "3.7.0", default-features = false, features = ["macros"] }
|
||||
vfio-ioctls = { git = "https://github.com/rust-vmm/vfio", branch = "main", default-features = false }
|
||||
vm-memory = { version = "0.14.1", features = ["backend-mmap", "backend-atomic"] }
|
||||
vmm-sys-util = { version = "0.12.1", features = ["with-serde"] }
|
||||
thiserror = "1.0.52"
|
||||
thiserror = "1.0.58"
|
||||
|
||||
[target.'cfg(target_arch = "x86_64")'.dependencies.iced-x86]
|
||||
optional = true
|
||||
version = "1.20.0"
|
||||
version = "1.21.0"
|
||||
default-features = false
|
||||
features = ["std", "decoder", "op_code_info", "instr_info", "fast_fmt"]
|
||||
|
||||
[dev-dependencies]
|
||||
env_logger = "0.10.1"
|
||||
env_logger = "0.10.2"
|
||||
|
|
|
@ -1,3 +1,36 @@
|
|||
// Copyright 2022 Arm Limited (or its affiliates). All rights reserved.
|
||||
|
||||
pub mod gic;
|
||||
|
||||
#[derive(Debug, Default, Copy, Clone, PartialEq, Eq)]
|
||||
#[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))]
|
||||
pub struct StandardRegisters {
|
||||
pub gpr: [u64; 31usize], // 31 General Purpose Registers
|
||||
pub sp: u64, // Stack Pointer
|
||||
pub pc: u64, // Program Counter
|
||||
pub pstate: u64, // Program Status Register
|
||||
pub sp_el1: u64, // Stack Pointer for EL1
|
||||
pub elr_el1: u64, // Exception Link Register for EL1
|
||||
pub spsr: [u64; 5usize], // Saved Program Status Registers
|
||||
pub vregs: [u128; 32usize], // 32 Floating Point Registers
|
||||
pub fpsr: u64, // Floating point status register
|
||||
pub fpcr: u64, // Floating point control register
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Copy, Clone, PartialEq, Eq)]
|
||||
#[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))]
|
||||
pub struct Register {
|
||||
pub id: u64,
|
||||
pub addr: u64,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Copy, Clone, PartialEq, Eq)]
|
||||
#[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))]
|
||||
pub struct VcpuInit {
|
||||
pub target: u32,
|
||||
pub features: [u32; 7usize],
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq)]
|
||||
#[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))]
|
||||
pub struct RegList(pub Vec<u64>);
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
//
|
||||
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
use crate::aarch64::{RegList, StandardRegisters, VcpuInit};
|
||||
use crate::arch::aarch64::{RegList, StandardRegisters, VcpuInit};
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
use crate::arch::x86::{
|
||||
CpuIdEntry, FpuState, LapicState, MsrEntry, SpecialRegisters, StandardRegisters,
|
||||
|
|
|
@ -206,6 +206,7 @@ pub fn construct_gicr_typers(vcpu_states: &[CpuState]) -> Vec<u64> {
|
|||
.sys_regs
|
||||
.into_iter()
|
||||
.filter(|reg| reg.id == KVM_ARM64_SYSREG_MPIDR_EL1)
|
||||
.map(|reg| reg.into())
|
||||
.collect();
|
||||
//calculate affinity
|
||||
let mut cpu_affid = mpidr[0].addr & 1095233437695;
|
||||
|
|
|
@ -10,14 +10,13 @@
|
|||
|
||||
pub mod gic;
|
||||
|
||||
use crate::arch::aarch64::{Register, StandardRegisters, VcpuInit};
|
||||
use crate::kvm::{KvmError, KvmResult};
|
||||
use kvm_bindings::{
|
||||
kvm_mp_state, kvm_one_reg, kvm_regs, KVM_REG_ARM_COPROC_MASK, KVM_REG_ARM_CORE,
|
||||
KVM_REG_SIZE_MASK, KVM_REG_SIZE_U32, KVM_REG_SIZE_U64,
|
||||
};
|
||||
pub use kvm_bindings::{
|
||||
kvm_one_reg as Register, kvm_regs as StandardRegisters, kvm_vcpu_init as VcpuInit, RegList,
|
||||
};
|
||||
pub use kvm_bindings::{kvm_vcpu_init, user_fpsimd_state, user_pt_regs};
|
||||
use serde::{Deserialize, Serialize};
|
||||
pub use {kvm_ioctls::Cap, kvm_ioctls::Kvm};
|
||||
|
||||
|
@ -121,3 +120,79 @@ pub struct VcpuKvmState {
|
|||
pub core_regs: kvm_regs,
|
||||
pub sys_regs: Vec<kvm_one_reg>,
|
||||
}
|
||||
|
||||
impl From<StandardRegisters> for kvm_regs {
|
||||
fn from(regs: StandardRegisters) -> Self {
|
||||
Self {
|
||||
regs: user_pt_regs {
|
||||
regs: regs.gpr,
|
||||
sp: regs.sp,
|
||||
pc: regs.pc,
|
||||
pstate: regs.pstate,
|
||||
},
|
||||
sp_el1: regs.sp_el1,
|
||||
elr_el1: regs.elr_el1,
|
||||
spsr: regs.spsr,
|
||||
fp_regs: user_fpsimd_state {
|
||||
vregs: regs.vregs,
|
||||
fpsr: regs.fpsr as u32,
|
||||
fpcr: regs.fpcr as u32,
|
||||
..Default::default()
|
||||
},
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<kvm_regs> for StandardRegisters {
|
||||
fn from(regs: kvm_regs) -> Self {
|
||||
Self {
|
||||
gpr: regs.regs.regs,
|
||||
sp: regs.regs.sp,
|
||||
pc: regs.regs.pc,
|
||||
pstate: regs.regs.pstate,
|
||||
sp_el1: regs.sp_el1,
|
||||
elr_el1: regs.elr_el1,
|
||||
spsr: regs.spsr,
|
||||
vregs: regs.fp_regs.vregs,
|
||||
fpsr: regs.fp_regs.fpsr as u64,
|
||||
fpcr: regs.fp_regs.fpcr as u64,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Register> for kvm_one_reg {
|
||||
fn from(reg: Register) -> Self {
|
||||
Self {
|
||||
id: reg.id,
|
||||
addr: reg.addr,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<kvm_one_reg> for Register {
|
||||
fn from(reg: kvm_one_reg) -> Self {
|
||||
Self {
|
||||
id: reg.id,
|
||||
addr: reg.addr,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<VcpuInit> for kvm_vcpu_init {
|
||||
fn from(vcpu_init: VcpuInit) -> Self {
|
||||
Self {
|
||||
target: vcpu_init.target,
|
||||
features: vcpu_init.features,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<kvm_vcpu_init> for VcpuInit {
|
||||
fn from(vcpu_init: kvm_vcpu_init) -> Self {
|
||||
Self {
|
||||
target: vcpu_init.target,
|
||||
features: vcpu_init.features,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,8 +12,7 @@
|
|||
use crate::aarch64::gic::KvmGicV3Its;
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
pub use crate::aarch64::{
|
||||
check_required_kvm_extensions, gic::Gicv3ItsState as GicState, is_system_register, VcpuInit,
|
||||
VcpuKvmState,
|
||||
check_required_kvm_extensions, gic::Gicv3ItsState as GicState, is_system_register, VcpuKvmState,
|
||||
};
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
use crate::arch::aarch64::gic::{Vgic, VgicConfig};
|
||||
|
@ -43,6 +42,8 @@ use vmm_sys_util::eventfd::EventFd;
|
|||
// x86_64 dependencies
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
pub mod x86_64;
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
use crate::arch::aarch64::{RegList, Register, StandardRegisters, VcpuInit};
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
use crate::arch::x86::{
|
||||
CpuIdEntry, FpuState, LapicState, MsrEntry, SpecialRegisters, StandardRegisters, XsaveState,
|
||||
|
@ -54,8 +55,6 @@ use crate::{
|
|||
CpuState, IoEventAddress, IrqRoutingEntry, MpState, UserMemoryRegion,
|
||||
USER_MEMORY_REGION_LOG_DIRTY, USER_MEMORY_REGION_READ, USER_MEMORY_REGION_WRITE,
|
||||
};
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
use aarch64::{RegList, Register, StandardRegisters};
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
use kvm_bindings::{
|
||||
kvm_enable_cap, kvm_msr_entry, MsrList, KVM_CAP_HYPERV_SYNIC, KVM_CAP_SPLIT_IRQCHIP,
|
||||
|
@ -77,10 +76,11 @@ pub use kvm_bindings::{
|
|||
};
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
use kvm_bindings::{
|
||||
kvm_regs, user_fpsimd_state, user_pt_regs, KVM_GUESTDBG_USE_HW, KVM_NR_SPSR, KVM_REG_ARM64,
|
||||
KVM_REG_ARM64_SYSREG, KVM_REG_ARM64_SYSREG_CRM_MASK, KVM_REG_ARM64_SYSREG_CRN_MASK,
|
||||
KVM_REG_ARM64_SYSREG_OP0_MASK, KVM_REG_ARM64_SYSREG_OP1_MASK, KVM_REG_ARM64_SYSREG_OP2_MASK,
|
||||
KVM_REG_ARM_CORE, KVM_REG_SIZE_U128, KVM_REG_SIZE_U32, KVM_REG_SIZE_U64,
|
||||
kvm_regs, user_fpsimd_state, user_pt_regs, RegList as KvmRegList, KVM_GUESTDBG_USE_HW,
|
||||
KVM_NR_SPSR, KVM_REG_ARM64, KVM_REG_ARM64_SYSREG, KVM_REG_ARM64_SYSREG_CRM_MASK,
|
||||
KVM_REG_ARM64_SYSREG_CRN_MASK, KVM_REG_ARM64_SYSREG_OP0_MASK, KVM_REG_ARM64_SYSREG_OP1_MASK,
|
||||
KVM_REG_ARM64_SYSREG_OP2_MASK, KVM_REG_ARM_CORE, KVM_REG_SIZE_U128, KVM_REG_SIZE_U32,
|
||||
KVM_REG_SIZE_U64,
|
||||
};
|
||||
#[cfg(feature = "tdx")]
|
||||
use kvm_bindings::{kvm_run__bindgen_ty_1, KVMIO};
|
||||
|
@ -691,8 +691,9 @@ impl vm::Vm for KvmVm {
|
|||
///
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
fn get_preferred_target(&self, kvi: &mut VcpuInit) -> vm::Result<()> {
|
||||
let mut kvi = (*kvi).into();
|
||||
self.fd
|
||||
.get_preferred_target(kvi)
|
||||
.get_preferred_target(&mut kvi)
|
||||
.map_err(|e| vm::HypervisorVmError::GetPreferredTarget(e.into()))
|
||||
}
|
||||
|
||||
|
@ -1210,7 +1211,7 @@ impl cpu::Vcpu for KvmVcpu {
|
|||
///
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
fn get_regs(&self) -> cpu::Result<StandardRegisters> {
|
||||
let mut state: StandardRegisters = kvm_regs::default();
|
||||
let mut state = kvm_regs::default();
|
||||
let mut off = offset_of!(user_pt_regs, regs);
|
||||
// There are 31 user_pt_regs:
|
||||
// https://elixir.free-electrons.com/linux/v4.14.174/source/arch/arm64/include/uapi/asm/ptrace.h#L72
|
||||
|
@ -1305,7 +1306,7 @@ impl cpu::Vcpu for KvmVcpu {
|
|||
.get_one_reg(arm64_core_reg_id!(KVM_REG_SIZE_U32, off), &mut bytes)
|
||||
.map_err(|e| cpu::HypervisorCpuError::GetCoreRegister(e.into()))?;
|
||||
state.fp_regs.fpcr = u32::from_le_bytes(bytes);
|
||||
Ok(state)
|
||||
Ok(state.into())
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
|
@ -1328,6 +1329,7 @@ impl cpu::Vcpu for KvmVcpu {
|
|||
fn set_regs(&self, state: &StandardRegisters) -> cpu::Result<()> {
|
||||
// The function follows the exact identical order from `state`. Look there
|
||||
// for some additional info on registers.
|
||||
let state: kvm_regs = (*state).into();
|
||||
let mut off = offset_of!(user_pt_regs, regs);
|
||||
for i in 0..31 {
|
||||
self.fd
|
||||
|
@ -1776,8 +1778,9 @@ impl cpu::Vcpu for KvmVcpu {
|
|||
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
fn vcpu_init(&self, kvi: &VcpuInit) -> cpu::Result<()> {
|
||||
let kvi = (*kvi).into();
|
||||
self.fd
|
||||
.vcpu_init(kvi)
|
||||
.vcpu_init(&kvi)
|
||||
.map_err(|e| cpu::HypervisorCpuError::VcpuInit(e.into()))
|
||||
}
|
||||
|
||||
|
@ -1787,8 +1790,10 @@ impl cpu::Vcpu for KvmVcpu {
|
|||
///
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
fn get_reg_list(&self, reg_list: &mut RegList) -> cpu::Result<()> {
|
||||
let mut kvm_reg_list: KvmRegList = KvmRegList::from_entries(reg_list.0.as_slice())
|
||||
.map_err(|e| cpu::HypervisorCpuError::GetRegList(e.into()))?;
|
||||
self.fd
|
||||
.get_reg_list(reg_list)
|
||||
.get_reg_list(&mut kvm_reg_list)
|
||||
.map_err(|e| cpu::HypervisorCpuError::GetRegList(e.into()))
|
||||
}
|
||||
|
||||
|
@ -2013,13 +2018,13 @@ impl cpu::Vcpu for KvmVcpu {
|
|||
..Default::default()
|
||||
};
|
||||
// Get core registers
|
||||
state.core_regs = self.get_regs()?;
|
||||
state.core_regs = self.get_regs()?.into();
|
||||
|
||||
// Get systerm register
|
||||
// Call KVM_GET_REG_LIST to get all registers available to the guest.
|
||||
// For ArmV8 there are around 500 registers.
|
||||
let mut sys_regs: Vec<Register> = Vec::new();
|
||||
let mut reg_list = RegList::new(500).unwrap();
|
||||
let mut reg_list = KvmRegList::new(500).unwrap();
|
||||
self.fd
|
||||
.get_reg_list(&mut reg_list)
|
||||
.map_err(|e| cpu::HypervisorCpuError::GetRegList(e.into()))?;
|
||||
|
@ -2041,13 +2046,16 @@ impl cpu::Vcpu for KvmVcpu {
|
|||
self.fd
|
||||
.get_one_reg(*index, &mut bytes)
|
||||
.map_err(|e| cpu::HypervisorCpuError::GetSysRegister(e.into()))?;
|
||||
sys_regs.push(kvm_bindings::kvm_one_reg {
|
||||
id: *index,
|
||||
addr: u64::from_le_bytes(bytes),
|
||||
});
|
||||
sys_regs.push(
|
||||
kvm_bindings::kvm_one_reg {
|
||||
id: *index,
|
||||
addr: u64::from_le_bytes(bytes),
|
||||
}
|
||||
.into(),
|
||||
);
|
||||
}
|
||||
|
||||
state.sys_regs = sys_regs;
|
||||
state.sys_regs = sys_regs.into_iter().map(|reg| reg.into()).collect();
|
||||
|
||||
Ok(state.into())
|
||||
}
|
||||
|
@ -2149,7 +2157,7 @@ impl cpu::Vcpu for KvmVcpu {
|
|||
fn set_state(&self, state: &CpuState) -> cpu::Result<()> {
|
||||
let state: VcpuKvmState = state.clone().into();
|
||||
// Set core registers
|
||||
self.set_regs(&state.core_regs)?;
|
||||
self.set_regs(&state.core_regs.into())?;
|
||||
// Set system registers
|
||||
for reg in &state.sys_regs {
|
||||
self.fd
|
||||
|
|
|
@ -1191,12 +1191,12 @@ impl cpu::Vcpu for MshvVcpu {
|
|||
}
|
||||
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
fn set_regs(&self, regs: &StandardRegisters) -> cpu::Result<()> {
|
||||
fn set_regs(&self, regs: &crate::arch::aarch64::StandardRegisters) -> cpu::Result<()> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
fn get_regs(&self) -> cpu::Result<StandardRegisters> {
|
||||
fn get_regs(&self) -> cpu::Result<crate::arch::aarch64::StandardRegisters> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
|
|
|
@ -8,10 +8,10 @@
|
|||
//
|
||||
//
|
||||
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
use crate::aarch64::VcpuInit;
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
use crate::arch::aarch64::gic::{Vgic, VgicConfig};
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
use crate::arch::aarch64::VcpuInit;
|
||||
#[cfg(feature = "tdx")]
|
||||
use crate::arch::x86::CpuIdEntry;
|
||||
use crate::cpu::Vcpu;
|
||||
|
|
|
@ -6,16 +6,16 @@ edition = "2021"
|
|||
|
||||
[dependencies]
|
||||
epoll = "4.3.3"
|
||||
getrandom = "0.2.11"
|
||||
getrandom = "0.2.13"
|
||||
libc = "0.2.153"
|
||||
log = "0.4.20"
|
||||
log = "0.4.21"
|
||||
net_gen = { path = "../net_gen" }
|
||||
rate_limiter = { path = "../rate_limiter" }
|
||||
serde = "1.0.196"
|
||||
thiserror = "1.0.52"
|
||||
serde = "1.0.197"
|
||||
thiserror = "1.0.58"
|
||||
versionize = "0.2.0"
|
||||
versionize_derive = "0.1.6"
|
||||
virtio-bindings = "0.2.0"
|
||||
virtio-bindings = "0.2.2"
|
||||
virtio-queue = "0.11.0"
|
||||
vm-memory = { version = "0.14.1", features = ["backend-mmap", "backend-atomic", "backend-bitmap"] }
|
||||
vm-virtio = { path = "../vm-virtio" }
|
||||
|
@ -25,4 +25,4 @@ vmm-sys-util = "0.12.1"
|
|||
once_cell = "1.19.0"
|
||||
pnet = "0.34.0"
|
||||
pnet_datalink = "0.34.0"
|
||||
serde_json = "1.0.114"
|
||||
serde_json = "1.0.115"
|
||||
|
|
|
@ -10,7 +10,7 @@ kvm = ["vfio-ioctls/kvm"]
|
|||
mshv = ["vfio-ioctls/mshv"]
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.79"
|
||||
anyhow = "1.0.81"
|
||||
byteorder = "1.5.0"
|
||||
hypervisor = { path = "../hypervisor" }
|
||||
vfio-bindings = { git = "https://github.com/rust-vmm/vfio", branch = "main", features = ["fam-wrappers"] }
|
||||
|
@ -19,9 +19,9 @@ vfio_user = { git = "https://github.com/rust-vmm/vfio-user", branch = "main" }
|
|||
|
||||
vmm-sys-util = "0.12.1"
|
||||
libc = "0.2.153"
|
||||
log = "0.4.20"
|
||||
serde = { version = "1.0.196", features = ["derive"] }
|
||||
thiserror = "1.0.52"
|
||||
log = "0.4.21"
|
||||
serde = { version = "1.0.197", features = ["derive"] }
|
||||
thiserror = "1.0.58"
|
||||
versionize = "0.2.0"
|
||||
versionize_derive = "0.1.6"
|
||||
vm-allocator = { path = "../vm-allocator" }
|
||||
|
|
|
@ -6,10 +6,10 @@ edition = "2021"
|
|||
build = "../build.rs"
|
||||
|
||||
[dependencies]
|
||||
clap = { version = "4.5.1", features = ["wrap_help"] }
|
||||
dirs = "5.0.0"
|
||||
serde = { version = "1.0.196", features = ["rc", "derive"] }
|
||||
serde_json = "1.0.114"
|
||||
clap = { version = "4.5.4", features = ["wrap_help"] }
|
||||
dirs = "5.0.1"
|
||||
serde = { version = "1.0.197", features = ["rc", "derive"] }
|
||||
serde_json = "1.0.115"
|
||||
test_infra = { path = "../test_infra" }
|
||||
thiserror = "1.0.52"
|
||||
thiserror = "1.0.58"
|
||||
wait-timeout = "0.2.0"
|
||||
|
|
|
@ -6,6 +6,6 @@ edition = "2021"
|
|||
[dependencies]
|
||||
epoll = "4.3.3"
|
||||
libc = "0.2.153"
|
||||
log = "0.4.20"
|
||||
thiserror = "1.0.40"
|
||||
log = "0.4.21"
|
||||
thiserror = "1.0.58"
|
||||
vmm-sys-util = "0.12.1"
|
||||
|
|
|
@ -5,12 +5,12 @@ authors = ["The Cloud Hypervisor Authors"]
|
|||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
dirs = "5.0.0"
|
||||
dirs = "5.0.1"
|
||||
epoll = "4.3.3"
|
||||
libc = "0.2.153"
|
||||
once_cell = "1.19.0"
|
||||
serde = { version = "1.0.196", features = ["rc", "derive"] }
|
||||
serde_json = "1.0.114"
|
||||
serde = { version = "1.0.197", features = ["rc", "derive"] }
|
||||
serde_json = "1.0.115"
|
||||
ssh2 = { version = "0.9.4", features = ["vendored-openssl"] }
|
||||
vmm-sys-util = "0.12.1"
|
||||
wait-timeout = "0.2.0"
|
||||
|
|
|
@ -6,10 +6,10 @@ license = "Apache-2.0"
|
|||
version = "0.1.0"
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.66"
|
||||
byteorder = "1.4.3"
|
||||
libc = "0.2.138"
|
||||
log = "0.4.17"
|
||||
anyhow = "1.0.81"
|
||||
byteorder = "1.5.0"
|
||||
libc = "0.2.153"
|
||||
log = "0.4.21"
|
||||
net_gen = { path = "../net_gen" }
|
||||
thiserror = "1.0.37"
|
||||
thiserror = "1.0.58"
|
||||
vmm-sys-util = "0.12.1"
|
||||
|
|
|
@ -6,10 +6,10 @@ edition = "2021"
|
|||
|
||||
[dependencies]
|
||||
libc = "0.2.153"
|
||||
log = "0.4.20"
|
||||
log = "0.4.21"
|
||||
once_cell = "1.19.0"
|
||||
serde = { version = "1.0.196", features = ["rc", "derive"] }
|
||||
serde_json = "1.0.114"
|
||||
serde = { version = "1.0.197", features = ["rc", "derive"] }
|
||||
serde_json = "1.0.115"
|
||||
|
||||
[features]
|
||||
tracing = []
|
||||
|
|
|
@ -6,16 +6,16 @@ edition = "2021"
|
|||
build = "../build.rs"
|
||||
|
||||
[dependencies]
|
||||
clap = { version = "4.5.1", features = ["wrap_help","cargo"] }
|
||||
clap = { version = "4.5.4", features = ["wrap_help","cargo"] }
|
||||
block = { path = "../block" }
|
||||
env_logger = "0.10.1"
|
||||
env_logger = "0.10.2"
|
||||
epoll = "4.3.3"
|
||||
libc = "0.2.153"
|
||||
log = "0.4.20"
|
||||
log = "0.4.21"
|
||||
option_parser = { path = "../option_parser" }
|
||||
vhost = { version = "0.10.0", features = ["vhost-user-backend"] }
|
||||
vhost-user-backend = "0.13.1"
|
||||
virtio-bindings = "0.2.0"
|
||||
virtio-bindings = "0.2.2"
|
||||
virtio-queue = "0.11.0"
|
||||
vm-memory = "0.14.1"
|
||||
vmm-sys-util = "0.12.1"
|
||||
|
|
|
@ -6,15 +6,15 @@ edition = "2021"
|
|||
build = "../build.rs"
|
||||
|
||||
[dependencies]
|
||||
clap = { version = "4.5.1", features = ["wrap_help","cargo"] }
|
||||
env_logger = "0.10.1"
|
||||
clap = { version = "4.5.4", features = ["wrap_help","cargo"] }
|
||||
env_logger = "0.10.2"
|
||||
epoll = "4.3.3"
|
||||
libc = "0.2.153"
|
||||
log = "0.4.20"
|
||||
log = "0.4.21"
|
||||
net_util = { path = "../net_util" }
|
||||
option_parser = { path = "../option_parser" }
|
||||
vhost = { version = "0.10.0", features = ["vhost-user-backend"] }
|
||||
vhost-user-backend = "0.13.1"
|
||||
virtio-bindings = "0.2.0"
|
||||
virtio-bindings = "0.2.2"
|
||||
vm-memory = "0.14.1"
|
||||
vmm-sys-util = "0.12.1"
|
||||
|
|
|
@ -8,27 +8,27 @@ edition = "2021"
|
|||
default = []
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.79"
|
||||
arc-swap = "1.5.1"
|
||||
anyhow = "1.0.81"
|
||||
arc-swap = "1.7.1"
|
||||
block = { path = "../block" }
|
||||
byteorder = "1.5.0"
|
||||
epoll = "4.3.3"
|
||||
event_monitor = { path = "../event_monitor" }
|
||||
libc = "0.2.153"
|
||||
log = "0.4.20"
|
||||
log = "0.4.21"
|
||||
net_gen = { path = "../net_gen" }
|
||||
net_util = { path = "../net_util" }
|
||||
pci = { path = "../pci" }
|
||||
rate_limiter = { path = "../rate_limiter" }
|
||||
seccompiler = "0.4.0"
|
||||
serde = { version = "1.0.196", features = ["derive"] }
|
||||
serde_json = "1.0.114"
|
||||
serde = { version = "1.0.197", features = ["derive"] }
|
||||
serde_json = "1.0.115"
|
||||
serial_buffer = { path = "../serial_buffer" }
|
||||
thiserror = "1.0.52"
|
||||
thiserror = "1.0.58"
|
||||
versionize = "0.2.0"
|
||||
versionize_derive = "0.1.6"
|
||||
vhost = { version = "0.10.0", features = ["vhost-user-frontend", "vhost-user-backend", "vhost-kern", "vhost-vdpa"] }
|
||||
virtio-bindings = { version = "0.2.0", features = ["virtio-v5_0_0"] }
|
||||
virtio-bindings = { version = "0.2.2", features = ["virtio-v5_0_0"] }
|
||||
virtio-queue = "0.11.0"
|
||||
vm-allocator = { path = "../vm-allocator" }
|
||||
vm-device = { path = "../vm-device" }
|
||||
|
|
|
@ -10,10 +10,10 @@ kvm = ["vfio-ioctls/kvm"]
|
|||
mshv = ["vfio-ioctls/mshv"]
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.79"
|
||||
anyhow = "1.0.81"
|
||||
hypervisor = { path = "../hypervisor" }
|
||||
thiserror = "1.0.52"
|
||||
serde = { version = "1.0.196", features = ["rc", "derive"] }
|
||||
thiserror = "1.0.58"
|
||||
serde = { version = "1.0.197", features = ["rc", "derive"] }
|
||||
vfio-ioctls = { git = "https://github.com/rust-vmm/vfio", branch = "main", default-features = false }
|
||||
vm-memory = { version = "0.14.1", features = ["backend-mmap"] }
|
||||
vmm-sys-util = "0.12.1"
|
||||
|
|
|
@ -5,10 +5,10 @@ authors = ["The Cloud Hypervisor Authors"]
|
|||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.79"
|
||||
thiserror = "1.0.52"
|
||||
serde = { version = "1.0.196", features = ["rc", "derive"] }
|
||||
serde_json = "1.0.114"
|
||||
anyhow = "1.0.81"
|
||||
thiserror = "1.0.58"
|
||||
serde = { version = "1.0.197", features = ["rc", "derive"] }
|
||||
serde_json = "1.0.115"
|
||||
versionize = "0.2.0"
|
||||
versionize_derive = "0.1.6"
|
||||
vm-memory = { version = "0.14.1", features = ["backend-mmap", "backend-atomic"] }
|
||||
|
|
|
@ -8,6 +8,6 @@ edition = "2021"
|
|||
default = []
|
||||
|
||||
[dependencies]
|
||||
log = "0.4.20"
|
||||
log = "0.4.21"
|
||||
virtio-queue = "0.11.0"
|
||||
vm-memory = { version = "0.14.1", features = ["backend-mmap", "backend-atomic", "backend-bitmap"] }
|
||||
|
|
|
@ -18,14 +18,14 @@ tracing = ["tracer/tracing"]
|
|||
|
||||
[dependencies]
|
||||
acpi_tables = { git = "https://github.com/rust-vmm/acpi_tables", branch = "main" }
|
||||
anyhow = "1.0.79"
|
||||
arc-swap = "1.5.1"
|
||||
anyhow = "1.0.81"
|
||||
arc-swap = "1.7.1"
|
||||
arch = { path = "../arch" }
|
||||
bitflags = "2.4.2"
|
||||
bitflags = "2.5.0"
|
||||
block = { path = "../block" }
|
||||
blocking = { version = "1.5.1", optional = true }
|
||||
cfg-if = "1.0.0"
|
||||
clap = "4.5.1"
|
||||
clap = "4.5.4"
|
||||
devices = { path = "../devices" }
|
||||
epoll = "4.3.3"
|
||||
event_monitor = { path = "../event_monitor" }
|
||||
|
@ -39,7 +39,7 @@ igvm_defs = { git = "https://github.com/microsoft/igvm", branch = "main", packag
|
|||
igvm_parser = { git = "https://github.com/microsoft/igvm", branch = "main", package = "igvm", optional = true }
|
||||
libc = "0.2.153"
|
||||
linux-loader = { version = "0.11.0", features = ["elf", "bzimage", "pe"] }
|
||||
log = "0.4.20"
|
||||
log = "0.4.21"
|
||||
micro_http = { git = "https://github.com/firecracker-microvm/micro-http", branch = "main" }
|
||||
mshv-bindings = { git = "https://github.com/rust-vmm/mshv", branch = "main", features = ["with-serde", "fam-wrappers"], optional = true }
|
||||
net_util = { path = "../net_util" }
|
||||
|
@ -49,13 +49,13 @@ pci = { path = "../pci" }
|
|||
range_map_vec = { version = "0.1.0", optional = true }
|
||||
rate_limiter = { path = "../rate_limiter" }
|
||||
seccompiler = "0.4.0"
|
||||
serde = { version = "1.0.196", features = ["rc", "derive"] }
|
||||
serde_json = "1.0.114"
|
||||
serde = { version = "1.0.197", features = ["rc", "derive"] }
|
||||
serde_json = "1.0.115"
|
||||
serial_buffer = { path = "../serial_buffer" }
|
||||
signal-hook = "0.3.17"
|
||||
thiserror = "1.0.52"
|
||||
thiserror = "1.0.58"
|
||||
tracer = { path = "../tracer" }
|
||||
uuid = "1.3.4"
|
||||
uuid = "1.8.0"
|
||||
versionize = "0.2.0"
|
||||
versionize_derive = "0.1.6"
|
||||
vfio-ioctls = { git = "https://github.com/rust-vmm/vfio", branch = "main", default-features = false }
|
||||
|
|
|
@ -43,7 +43,9 @@ use gdbstub_arch::aarch64::reg::AArch64CoreRegs as CoreRegs;
|
|||
#[cfg(all(target_arch = "x86_64", feature = "guest_debug"))]
|
||||
use gdbstub_arch::x86::reg::{X86SegmentRegs, X86_64CoreRegs as CoreRegs};
|
||||
#[cfg(all(target_arch = "aarch64", feature = "guest_debug"))]
|
||||
use hypervisor::aarch64::StandardRegisters;
|
||||
use hypervisor::arch::aarch64::StandardRegisters;
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
use hypervisor::arch::aarch64::VcpuInit;
|
||||
#[cfg(all(target_arch = "x86_64", feature = "guest_debug"))]
|
||||
use hypervisor::arch::x86::msr_index;
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
|
@ -413,7 +415,7 @@ impl Vcpu {
|
|||
/// Initializes an aarch64 specific vcpu for booting Linux.
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
pub fn init(&self, vm: &Arc<dyn hypervisor::Vm>) -> Result<()> {
|
||||
let mut kvi: kvm_bindings::kvm_vcpu_init = kvm_bindings::kvm_vcpu_init::default();
|
||||
let mut kvi = VcpuInit::default();
|
||||
|
||||
// This reads back the kernel's preferred target type.
|
||||
vm.get_preferred_target(&mut kvi)
|
||||
|
@ -2383,9 +2385,9 @@ impl Debuggable for CpuManager {
|
|||
.get_regs(cpu_id as u8)
|
||||
.map_err(DebuggableError::ReadRegs)?;
|
||||
Ok(CoreRegs {
|
||||
x: gregs.regs.regs,
|
||||
sp: gregs.regs.sp,
|
||||
pc: gregs.regs.pc,
|
||||
x: gregs.gpr,
|
||||
sp: gregs.sp,
|
||||
pc: gregs.pc,
|
||||
..Default::default()
|
||||
})
|
||||
}
|
||||
|
@ -2454,9 +2456,9 @@ impl Debuggable for CpuManager {
|
|||
.get_regs(cpu_id as u8)
|
||||
.map_err(DebuggableError::ReadRegs)?;
|
||||
|
||||
gregs.regs.regs = regs.x;
|
||||
gregs.regs.sp = regs.sp;
|
||||
gregs.regs.pc = regs.pc;
|
||||
gregs.gpr = regs.x;
|
||||
gregs.sp = regs.sp;
|
||||
gregs.pc = regs.pc;
|
||||
|
||||
self.set_regs(cpu_id as u8, &gregs)
|
||||
.map_err(DebuggableError::WriteRegs)?;
|
||||
|
@ -2889,10 +2891,10 @@ mod tests {
|
|||
#[cfg(test)]
|
||||
mod tests {
|
||||
use arch::{aarch64::regs, layout};
|
||||
use hypervisor::arch::aarch64::{StandardRegisters, VcpuInit};
|
||||
use hypervisor::kvm::aarch64::is_system_register;
|
||||
use hypervisor::kvm::kvm_bindings::{
|
||||
kvm_regs, kvm_vcpu_init, user_pt_regs, KVM_REG_ARM64, KVM_REG_ARM64_SYSREG,
|
||||
KVM_REG_ARM_CORE, KVM_REG_SIZE_U64,
|
||||
user_pt_regs, KVM_REG_ARM64, KVM_REG_ARM64_SYSREG, KVM_REG_ARM_CORE, KVM_REG_SIZE_U64,
|
||||
};
|
||||
use hypervisor::{arm64_core_reg_id, offset_of};
|
||||
use std::mem;
|
||||
|
@ -2907,7 +2909,7 @@ mod tests {
|
|||
// Must fail when vcpu is not initialized yet.
|
||||
assert!(res.is_err());
|
||||
|
||||
let mut kvi: kvm_vcpu_init = kvm_vcpu_init::default();
|
||||
let mut kvi = VcpuInit::default();
|
||||
vm.get_preferred_target(&mut kvi).unwrap();
|
||||
vcpu.vcpu_init(&kvi).unwrap();
|
||||
|
||||
|
@ -2919,7 +2921,7 @@ mod tests {
|
|||
let hv = hypervisor::new().unwrap();
|
||||
let vm = hv.create_vm().unwrap();
|
||||
let vcpu = vm.create_vcpu(0, None).unwrap();
|
||||
let mut kvi: kvm_vcpu_init = kvm_vcpu_init::default();
|
||||
let mut kvi = VcpuInit::default();
|
||||
vm.get_preferred_target(&mut kvi).unwrap();
|
||||
|
||||
// Must fail when vcpu is not initialized yet.
|
||||
|
@ -2943,7 +2945,7 @@ mod tests {
|
|||
let hv = hypervisor::new().unwrap();
|
||||
let vm = hv.create_vm().unwrap();
|
||||
let vcpu = vm.create_vcpu(0, None).unwrap();
|
||||
let mut kvi: kvm_vcpu_init = kvm_vcpu_init::default();
|
||||
let mut kvi = VcpuInit::default();
|
||||
vm.get_preferred_target(&mut kvi).unwrap();
|
||||
|
||||
// Must fail when vcpu is not initialized yet.
|
||||
|
@ -2954,7 +2956,7 @@ mod tests {
|
|||
"Failed to get core register: Exec format error (os error 8)"
|
||||
);
|
||||
|
||||
let mut state = kvm_regs::default();
|
||||
let mut state = StandardRegisters::default();
|
||||
let res = vcpu.set_regs(&state);
|
||||
assert!(res.is_err());
|
||||
assert_eq!(
|
||||
|
@ -2966,7 +2968,7 @@ mod tests {
|
|||
let res = vcpu.get_regs();
|
||||
assert!(res.is_ok());
|
||||
state = res.unwrap();
|
||||
assert_eq!(state.regs.pstate, 0x3C5);
|
||||
assert_eq!(state.pstate, 0x3C5);
|
||||
|
||||
assert!(vcpu.set_regs(&state).is_ok());
|
||||
}
|
||||
|
@ -2976,7 +2978,7 @@ mod tests {
|
|||
let hv = hypervisor::new().unwrap();
|
||||
let vm = hv.create_vm().unwrap();
|
||||
let vcpu = vm.create_vcpu(0, None).unwrap();
|
||||
let mut kvi: kvm_vcpu_init = kvm_vcpu_init::default();
|
||||
let mut kvi = VcpuInit::default();
|
||||
vm.get_preferred_target(&mut kvi).unwrap();
|
||||
|
||||
let res = vcpu.get_mp_state();
|
||||
|
|
Loading…
Reference in New Issue