mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-27 16:13:23 +00:00
* 几个结构体 * 通过vmx_init以及create_vm,create_vcpu部分TODO * kvm_run完成一半 * 能够成功vmlaunch,但是在vmexit时候还有些问题未排查出来 * 解决了vmlaunch导致的cpu_reset的问题 * 整理代码 * 暂时性push到hyc仓库 * 修改内存虚拟化部分参数传入,解决死锁问题 * 初步完成ept映射.但不停EPT_VIOLATION * 初步完成了EPT映射,但是读写内存还是有点问题 * fixme * 更新了一些truncate到from_bits_unchecked的实现 * 完成内存虚拟化EPT_VIOLATION的映射 * fmt * Remove /fixme from .gitignore * Remove /fixme file * Update kernel/src/init/init.rs Co-authored-by: Samuel Dai <samuka007@dragonos.org> * Update kernel/src/init/init.rs Co-authored-by: Samuel Dai <samuka007@dragonos.org> * 修改了注释格式,删除了附带的一些文件操作 * feat(syscall): 实现syscall restart (#1075) 能够在系统调用返回ERESTARTSYS时,信号处理结束后,自动重启系统调用. TODO: 实现wait等需要restart_block的系统调用的重启 Signed-off-by: longjin <longjin@DragonOS.org> * chore: update docker image version in script && update doc (#1076) * chore: update docker image version in script * chore: replace lots of spaces with newline in doc * fix: 修复wait4系统调用部分语义与Linux不一致的问题 (#1080) * fix: 修复wait4系统调用部分语义与Linux不一致的问题 解决wait不住/wait之后卡死的bug --------- Signed-off-by: longjin <longjin@DragonOS.org> * feat(fs/syscall): 实现fchdir系统调用 (#1081) Signed-off-by: longjin <longjin@DragonOS.org> * fix(mm): 修复fat文件系统的PageCache同步问题 (#1005) --------- Co-authored-by: longjin <longjin@DragonOS.org> * fix: 修正nographic启动时,控制台日志未能输出到文件的问题 (#1082) Signed-off-by: longjin <longjin@DragonOS.org> * fix(process): 修复copy_process的一些bug & 支持默认init进程传参 (#1083) - 修复`copy_process`函数对标志位处理不正确的bug - init进程搜索列表中,支持为默认init程序传入参数 Signed-off-by: longjin <longjin@DragonOS.org> * feat: 完善sys_reboot (#1084) * fix(process): 修复copy_process的一些bug & 支持默认init进程传参 - 修复`copy_process`函数对标志位处理不正确的bug - init进程搜索列表中,支持为默认init程序传入参数 Signed-off-by: longjin <longjin@DragonOS.org> * feat: 完善sys_reboot - 校验magic number - 支持多个cmd (具体内容未实现) Signed-off-by: longjin <longjin@DragonOS.org> --------- Signed-off-by: longjin <longjin@DragonOS.org> * fix: 修复do_wait函数在wait所有子进程时,忘了释放锁就sleep的bug (#1089) Signed-off-by: longjin <longjin@DragonOS.org> * pull主线并且fmt --------- Signed-off-by: longjin <longjin@DragonOS.org> Co-authored-by: GnoCiYeH <heyicong@dragonos.org> Co-authored-by: Samuel Dai <samuka007@dragonos.org> Co-authored-by: LoGin <longjin@DragonOS.org> Co-authored-by: LIU Yuwei <22045841+Marsman1996@users.noreply.github.com> Co-authored-by: MemoryShore <1353318529@qq.com>
60 lines
1.5 KiB
Rust
60 lines
1.5 KiB
Rust
use alloc::vec::Vec;
|
||
|
||
#[derive(Debug, Default, Clone, Copy)]
|
||
#[allow(dead_code)]
|
||
pub struct KvmCpuidEntry2 {
|
||
pub function: u32,
|
||
pub index: u32,
|
||
pub flags: KvmCpuidFlag,
|
||
pub eax: u32,
|
||
pub ebx: u32,
|
||
pub ecx: u32,
|
||
pub edx: u32,
|
||
padding: [u32; 3],
|
||
}
|
||
|
||
impl KvmCpuidEntry2 {
|
||
pub fn find(
|
||
entries: &Vec<KvmCpuidEntry2>,
|
||
function: u32,
|
||
index: Option<u32>,
|
||
) -> Option<KvmCpuidEntry2> {
|
||
for e in entries {
|
||
if e.function != function {
|
||
continue;
|
||
}
|
||
|
||
if !e
|
||
.flags
|
||
.contains(KvmCpuidFlag::KVM_CPUID_FLAG_SIGNIFCANT_INDEX)
|
||
|| Some(e.index) == index
|
||
{
|
||
return Some(*e);
|
||
}
|
||
|
||
if index.is_none() {
|
||
return Some(*e);
|
||
}
|
||
}
|
||
|
||
None
|
||
}
|
||
}
|
||
|
||
bitflags! {
|
||
pub struct KvmCpuidFlag: u32 {
|
||
/// 表示CPUID函数的输入索引值是重要的,它会影响CPUID函数的行为或返回值
|
||
const KVM_CPUID_FLAG_SIGNIFCANT_INDEX = 1 << 0;
|
||
/// 表示CPUID函数是有状态的,即它的行为可能受到先前CPUID函数调用的影响
|
||
const KVM_CPUID_FLAG_STATEFUL_FUNC = 1 << 1;
|
||
/// 表示CPUID函数的状态应该在下一次CPUID函数调用中读取
|
||
const KVM_CPUID_FLAG_STATE_READ_NEXT = 1 << 2;
|
||
}
|
||
}
|
||
|
||
impl Default for KvmCpuidFlag {
|
||
fn default() -> Self {
|
||
Self::empty()
|
||
}
|
||
}
|