106d5e247SLoGin use alloc::{string::ToString, sync::Arc}; 206d5e247SLoGin 3*91e9d4abSLoGin use system_error::SystemError; 406d5e247SLoGin 506d5e247SLoGin use super::kset::KSet; 606d5e247SLoGin 706d5e247SLoGin /// `/sys/hypervisor`的kset 806d5e247SLoGin static mut HYPERVISOR_KSET_INSTANCE: Option<Arc<KSet>> = None; 906d5e247SLoGin 1006d5e247SLoGin #[inline(always)] 1106d5e247SLoGin #[allow(dead_code)] sys_hypervisor_kset() -> Arc<KSet>1206d5e247SLoGinpub fn sys_hypervisor_kset() -> Arc<KSet> { 1306d5e247SLoGin unsafe { HYPERVISOR_KSET_INSTANCE.clone().unwrap() } 1406d5e247SLoGin } 1506d5e247SLoGin 1606d5e247SLoGin /// 初始化`/sys/hypervisor`的kset hypervisor_init() -> Result<(), SystemError>1706d5e247SLoGinpub(super) fn hypervisor_init() -> Result<(), SystemError> { 1806d5e247SLoGin let hypervisor_kset = KSet::new("hypervisor".to_string()); 1906d5e247SLoGin hypervisor_kset 2006d5e247SLoGin .register(None) 2106d5e247SLoGin .expect("register hypervisor kset failed"); 2206d5e247SLoGin unsafe { 2306d5e247SLoGin HYPERVISOR_KSET_INSTANCE = Some(hypervisor_kset); 2406d5e247SLoGin } 2506d5e247SLoGin return Ok(()); 2606d5e247SLoGin } 27