Skip to content

Commit

Permalink
Enable MAX_VCPUS and SPLIT_IRQCHIP caps and create VCPU
Browse files Browse the repository at this point in the history
Signed-off-by: Jake Correnti <[email protected]>
  • Loading branch information
jakecorrenti committed May 17, 2024
1 parent aac74ef commit 8c4c154
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 2 deletions.
14 changes: 13 additions & 1 deletion src/launch/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

mod linux;

use kvm_bindings::{kvm_enable_cap, KVM_CAP_MAX_VCPUS, KVM_CAP_SPLIT_IRQCHIP};
use linux::{Capabilities, Cmd, CpuidConfig, InitVm, TdxError};

use bitflags::bitflags;
Expand All @@ -18,8 +19,19 @@ pub struct TdxVm {

impl TdxVm {
/// Create a new TDX VM with KVM
pub fn new(kvm_fd: &Kvm) -> Result<Self, TdxError> {
pub fn new(kvm_fd: &Kvm, max_vcpus: u64) -> Result<Self, TdxError> {
let vm_fd = kvm_fd.create_vm_with_type(KVM_X86_TDX_VM)?;
let mut cap: kvm_enable_cap = Default::default();

// TDX requires that MAX_VCPUS and SPLIT_IRQCHIP be set
cap.cap = KVM_CAP_MAX_VCPUS;
cap.args[0] = max_vcpus;
vm_fd.enable_cap(&cap).unwrap();

cap.cap = KVM_CAP_SPLIT_IRQCHIP;
cap.args[0] = 24;
vm_fd.enable_cap(&cap).unwrap();

Ok(Self { fd: vm_fd })
}

Expand Down
3 changes: 2 additions & 1 deletion tests/launch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ use tdx::launch::TdxVm;
#[test]
fn launch() {
let kvm_fd = Kvm::new().unwrap();
let tdx_vm = TdxVm::new(&kvm_fd).unwrap();
let tdx_vm = TdxVm::new(&kvm_fd, 100).unwrap();
let caps = tdx_vm.get_capabilities().unwrap();
let _ = tdx_vm.init_vm(&kvm_fd, &caps).unwrap();
let _vcpufd = tdx_vm.fd.create_vcpu(0).unwrap();
}

0 comments on commit 8c4c154

Please sign in to comment.