From eceddbedb6d46ea96dd254c67146ff95951ec89b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kr=C3=B6ning?= Date: Mon, 24 Jun 2024 10:38:20 +0200 Subject: [PATCH] refactor: migrate from `lazy_static` to `std::sync::LazyLock` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Kröning --- Cargo.lock | 7 ----- Cargo.toml | 1 - src/linux/mod.rs | 7 ++--- src/macos/x86_64/vcpu.rs | 61 +++++++++++++++++++--------------------- 4 files changed, 31 insertions(+), 45 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 443cccad..0f5515c0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -721,12 +721,6 @@ dependencies = [ "vmm-sys-util", ] -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - [[package]] name = "libc" version = "0.2.155" @@ -1454,7 +1448,6 @@ dependencies = [ "hermit-entry", "kvm-bindings", "kvm-ioctls", - "lazy_static", "libc", "log", "mac_address", diff --git a/Cargo.toml b/Cargo.toml index b267e69a..997e8feb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -49,7 +49,6 @@ env_logger = "0.11" gdbstub = "0.7" gdbstub_arch = "0.3" hermit-entry = { version = "0.10", features = ["loader"] } -lazy_static = "1.5" libc = "0.2" log = "0.4" mac_address = "1.1" diff --git a/src/linux/mod.rs b/src/linux/mod.rs index 211da3da..79f7a7c1 100755 --- a/src/linux/mod.rs +++ b/src/linux/mod.rs @@ -10,14 +10,13 @@ use std::{ io, net::{TcpListener, TcpStream}, os::unix::prelude::JoinHandleExt, - sync::{Arc, Barrier}, + sync::{Arc, Barrier, LazyLock}, thread, }; use core_affinity::CoreId; use gdbstub::stub::{DisconnectReason, GdbStub}; use kvm_ioctls::Kvm; -use lazy_static::lazy_static; use libc::{SIGRTMAX, SIGRTMIN}; use nix::sys::{ pthread::{pthread_kill, Pthread}, @@ -33,9 +32,7 @@ use crate::{ vm::UhyveVm, }; -lazy_static! { - static ref KVM: Kvm = Kvm::new().unwrap(); -} +static KVM: LazyLock = LazyLock::new(|| Kvm::new().unwrap()); /// The signal for kicking vCPUs out of KVM_RUN. /// diff --git a/src/macos/x86_64/vcpu.rs b/src/macos/x86_64/vcpu.rs index 1cfaf230..b3799ba3 100644 --- a/src/macos/x86_64/vcpu.rs +++ b/src/macos/x86_64/vcpu.rs @@ -2,11 +2,10 @@ use std::{ arch::x86_64::__cpuid_count, - sync::{Arc, Mutex}, + sync::{Arc, LazyLock, Mutex}, }; use burst::x86::{disassemble_64, InstructionOperation, OperandType}; -use lazy_static::lazy_static; use log::{debug, trace}; use uhyve_interface::{GuestPhysAddr, Hypercall}; use x86_64::{ @@ -125,36 +124,34 @@ fn cap2ctrl(cap: u64, ctrl: u64) -> u64 { (ctrl | (cap & 0xffffffff)) & (cap >> 32) } -lazy_static! { - static ref CAP_PINBASED: u64 = { - let cap: u64 = { read_vmx_cap(&xhypervisor::VMXCap::PINBASED).unwrap() }; - cap2ctrl(cap, PIN_BASED_INTR | PIN_BASED_NMI | PIN_BASED_VIRTUAL_NMI) - }; - static ref CAP_PROCBASED: u64 = { - let cap: u64 = { read_vmx_cap(&xhypervisor::VMXCap::PROCBASED).unwrap() }; - cap2ctrl( - cap, - CPU_BASED_SECONDARY_CTLS - | CPU_BASED_MWAIT - | CPU_BASED_MSR_BITMAPS - | CPU_BASED_MONITOR - | CPU_BASED_TSC_OFFSET - | CPU_BASED_TPR_SHADOW, - ) - }; - static ref CAP_PROCBASED2: u64 = { - let cap: u64 = { read_vmx_cap(&xhypervisor::VMXCap::PROCBASED2).unwrap() }; - cap2ctrl(cap, CPU_BASED2_RDTSCP | CPU_BASED2_APIC_REG_VIRT) - }; - static ref CAP_ENTRY: u64 = { - let cap: u64 = { read_vmx_cap(&xhypervisor::VMXCap::ENTRY).unwrap() }; - cap2ctrl(cap, VMENTRY_LOAD_EFER | VMENTRY_GUEST_IA32E) - }; - static ref CAP_EXIT: u64 = { - let cap: u64 = { read_vmx_cap(&xhypervisor::VMXCap::EXIT).unwrap() }; - cap2ctrl(cap, 0) - }; -} +static CAP_PINBASED: LazyLock = LazyLock::new(|| { + let cap: u64 = { read_vmx_cap(&xhypervisor::VMXCap::PINBASED).unwrap() }; + cap2ctrl(cap, PIN_BASED_INTR | PIN_BASED_NMI | PIN_BASED_VIRTUAL_NMI) +}); +static CAP_PROCBASED: LazyLock = LazyLock::new(|| { + let cap: u64 = { read_vmx_cap(&xhypervisor::VMXCap::PROCBASED).unwrap() }; + cap2ctrl( + cap, + CPU_BASED_SECONDARY_CTLS + | CPU_BASED_MWAIT + | CPU_BASED_MSR_BITMAPS + | CPU_BASED_MONITOR + | CPU_BASED_TSC_OFFSET + | CPU_BASED_TPR_SHADOW, + ) +}); +static CAP_PROCBASED2: LazyLock = LazyLock::new(|| { + let cap: u64 = { read_vmx_cap(&xhypervisor::VMXCap::PROCBASED2).unwrap() }; + cap2ctrl(cap, CPU_BASED2_RDTSCP | CPU_BASED2_APIC_REG_VIRT) +}); +static CAP_ENTRY: LazyLock = LazyLock::new(|| { + let cap: u64 = { read_vmx_cap(&xhypervisor::VMXCap::ENTRY).unwrap() }; + cap2ctrl(cap, VMENTRY_LOAD_EFER | VMENTRY_GUEST_IA32E) +}); +static CAP_EXIT: LazyLock = LazyLock::new(|| { + let cap: u64 = { read_vmx_cap(&xhypervisor::VMXCap::EXIT).unwrap() }; + cap2ctrl(cap, 0) +}); pub struct XhyveCpu { id: u32,