mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-18 12:16:31 +00:00
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:
@ -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)
|
||||
|
Reference in New Issue
Block a user