Patch feat robust futex (#682)

* feat: 实现robust lock机制

* 前面更改vscode,修改回来

* 修改dadk的路径

* 提交.gitnore和.cargo,删除LICENSE,修改README

* 修改一个warn

* 删除.rustc_info.json

* 删除target文件夹

* 恢复DragonOS的LICENSE,删除Cargo.lock

* 将校验用户空间地址的代码写入函数内;将部分match分支用ok_or代替

* 修改wakeup函数获取running queue时unwrap一个None值发生panic

* 测试程序使用syscalls库进行系统调用
This commit is contained in:
hmt
2024-04-06 22:26:34 +08:00
committed by GitHub
parent 23ef2b33d1
commit 06560afa2a
11 changed files with 825 additions and 15 deletions

View File

@ -690,9 +690,6 @@ impl Syscall {
let uaddr2 = VirtAddr::new(args[4]);
let val3 = args[5] as u32;
verify_area(uaddr, core::mem::size_of::<u32>())?;
verify_area(uaddr2, core::mem::size_of::<u32>())?;
let mut timespec = None;
if utime != 0 && operation.contains(FutexFlag::FLAGS_HAS_TIMEOUT) {
let reader = UserBufferReader::new(
@ -707,6 +704,26 @@ impl Syscall {
Self::do_futex(uaddr, operation, val, timespec, uaddr2, utime as u32, val3)
}
SYS_SET_ROBUST_LIST => {
let head = args[0];
let head_uaddr = VirtAddr::new(head);
let len = args[1];
let ret = Self::set_robust_list(head_uaddr, len);
return ret;
}
SYS_GET_ROBUST_LIST => {
let pid = args[0];
let head = args[1];
let head_uaddr = VirtAddr::new(head);
let len_ptr = args[2];
let len_ptr_uaddr = VirtAddr::new(len_ptr);
let ret = Self::get_robust_list(pid, head_uaddr, len_ptr_uaddr);
return ret;
}
SYS_READV => Self::readv(args[0] as i32, args[1], args[2]),
SYS_WRITEV => Self::writev(args[0] as i32, args[1], args[2]),
@ -952,11 +969,6 @@ impl Syscall {
Ok(0)
}
SYS_SET_ROBUST_LIST => {
kwarn!("SYS_SET_ROBUST_LIST has not yet been implemented");
Ok(0)
}
SYS_RSEQ => {
kwarn!("SYS_RSEQ has not yet been implemented");
Ok(0)