xref: /DragonOS/kernel/src/driver/base/hypervisor.rs (revision 91e9d4ab55ef960f57a1b6287bc523ca4341f67a)
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>1206d5e247SLoGin pub fn sys_hypervisor_kset() -> Arc<KSet> {
1306d5e247SLoGin     unsafe { HYPERVISOR_KSET_INSTANCE.clone().unwrap() }
1406d5e247SLoGin }
1506d5e247SLoGin 
1606d5e247SLoGin /// 初始化`/sys/hypervisor`的kset
hypervisor_init() -> Result<(), SystemError>1706d5e247SLoGin pub(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