mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-21 16:33:24 +00:00
Add syscall epoll_pwait
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
1435dd0896
commit
2b67dee1fc
@ -301,7 +301,7 @@ provided by Linux on x86-64 architecture.
|
|||||||
| 278 | vmsplice | ❌ |
|
| 278 | vmsplice | ❌ |
|
||||||
| 279 | move_pages | ❌ |
|
| 279 | move_pages | ❌ |
|
||||||
| 280 | utimensat | ✅ |
|
| 280 | utimensat | ✅ |
|
||||||
| 281 | epoll_pwait | ❌ |
|
| 281 | epoll_pwait | ✅ |
|
||||||
| 282 | signalfd | ❌ |
|
| 282 | signalfd | ❌ |
|
||||||
| 283 | timerfd_create | ❌ |
|
| 283 | timerfd_create | ❌ |
|
||||||
| 284 | eventfd | ❌ |
|
| 284 | eventfd | ❌ |
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
use core::time::Duration;
|
use core::time::Duration;
|
||||||
|
|
||||||
use super::{SyscallReturn, SYS_EPOLL_CREATE1, SYS_EPOLL_CTL, SYS_EPOLL_WAIT};
|
use super::{SyscallReturn, SYS_EPOLL_CREATE1, SYS_EPOLL_CTL, SYS_EPOLL_PWAIT, SYS_EPOLL_WAIT};
|
||||||
use crate::{
|
use crate::{
|
||||||
events::IoEvents,
|
events::IoEvents,
|
||||||
fs::{
|
fs::{
|
||||||
@ -137,6 +137,20 @@ pub fn sys_epoll_wait(
|
|||||||
Ok(SyscallReturn::Return(epoll_events.len() as _))
|
Ok(SyscallReturn::Return(epoll_events.len() as _))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn sys_epoll_pwait(
|
||||||
|
epfd: FileDescripter,
|
||||||
|
events_addr: Vaddr,
|
||||||
|
max_events: i32,
|
||||||
|
timeout: i32,
|
||||||
|
sigmask: Vaddr, //TODO: handle sigmask
|
||||||
|
) -> Result<SyscallReturn> {
|
||||||
|
log_syscall_entry!(SYS_EPOLL_PWAIT);
|
||||||
|
if sigmask != 0 {
|
||||||
|
warn!("epoll_pwait cannot handle signal mask, yet");
|
||||||
|
}
|
||||||
|
sys_epoll_wait(epfd, events_addr, max_events, timeout)
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, Pod)]
|
#[derive(Debug, Clone, Copy, Pod)]
|
||||||
#[repr(C, packed)]
|
#[repr(C, packed)]
|
||||||
struct c_epoll_event {
|
struct c_epoll_event {
|
||||||
|
@ -30,7 +30,9 @@ use crate::{
|
|||||||
clone::sys_clone,
|
clone::sys_clone,
|
||||||
close::sys_close,
|
close::sys_close,
|
||||||
dup::{sys_dup, sys_dup2},
|
dup::{sys_dup, sys_dup2},
|
||||||
epoll::{sys_epoll_create, sys_epoll_create1, sys_epoll_ctl, sys_epoll_wait},
|
epoll::{
|
||||||
|
sys_epoll_create, sys_epoll_create1, sys_epoll_ctl, sys_epoll_pwait, sys_epoll_wait,
|
||||||
|
},
|
||||||
execve::sys_execve,
|
execve::sys_execve,
|
||||||
exit::sys_exit,
|
exit::sys_exit,
|
||||||
exit_group::sys_exit_group,
|
exit_group::sys_exit_group,
|
||||||
@ -360,6 +362,7 @@ define_syscall_nums!(
|
|||||||
SYS_FCHMODAT = 268,
|
SYS_FCHMODAT = 268,
|
||||||
SYS_SET_ROBUST_LIST = 273,
|
SYS_SET_ROBUST_LIST = 273,
|
||||||
SYS_UTIMENSAT = 280,
|
SYS_UTIMENSAT = 280,
|
||||||
|
SYS_EPOLL_PWAIT = 281,
|
||||||
SYS_EPOLL_CREATE1 = 291,
|
SYS_EPOLL_CREATE1 = 291,
|
||||||
SYS_PIPE2 = 293,
|
SYS_PIPE2 = 293,
|
||||||
SYS_PRLIMIT64 = 302,
|
SYS_PRLIMIT64 = 302,
|
||||||
@ -549,6 +552,7 @@ pub fn syscall_dispatch(
|
|||||||
SYS_FCHMODAT => syscall_handler!(3, sys_fchmodat, args),
|
SYS_FCHMODAT => syscall_handler!(3, sys_fchmodat, args),
|
||||||
SYS_SET_ROBUST_LIST => syscall_handler!(2, sys_set_robust_list, args),
|
SYS_SET_ROBUST_LIST => syscall_handler!(2, sys_set_robust_list, args),
|
||||||
SYS_UTIMENSAT => syscall_handler!(4, sys_utimensat, args),
|
SYS_UTIMENSAT => syscall_handler!(4, sys_utimensat, args),
|
||||||
|
SYS_EPOLL_PWAIT => syscall_handler!(5, sys_epoll_pwait, args),
|
||||||
SYS_EPOLL_CREATE1 => syscall_handler!(1, sys_epoll_create1, args),
|
SYS_EPOLL_CREATE1 => syscall_handler!(1, sys_epoll_create1, args),
|
||||||
SYS_PIPE2 => syscall_handler!(2, sys_pipe2, args),
|
SYS_PIPE2 => syscall_handler!(2, sys_pipe2, args),
|
||||||
SYS_PRLIMIT64 => syscall_handler!(4, sys_prlimit64, args),
|
SYS_PRLIMIT64 => syscall_handler!(4, sys_prlimit64, args),
|
||||||
|
@ -10,6 +10,7 @@ TESTS ?= \
|
|||||||
chmod_test \
|
chmod_test \
|
||||||
chown_test \
|
chown_test \
|
||||||
chroot_test \
|
chroot_test \
|
||||||
|
epoll_test \
|
||||||
fsync_test \
|
fsync_test \
|
||||||
getdents_test \
|
getdents_test \
|
||||||
link_test \
|
link_test \
|
||||||
|
14
regression/syscall_test/blocklists/epoll_test
Normal file
14
regression/syscall_test/blocklists/epoll_test
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
EpollTest.AllWritable
|
||||||
|
EpollTest.LastReadable
|
||||||
|
EpollTest.LastNonWritable
|
||||||
|
EpollTest.Timeout_NoRandomSave
|
||||||
|
EpollTest.WaitThenUnblock
|
||||||
|
EpollTest.UnblockWithSignal
|
||||||
|
EpollTest.TimeoutNoFds
|
||||||
|
EpollTest.UnblockWithNewFD
|
||||||
|
EpollTest.Oneshot
|
||||||
|
EpollTest.EdgeTriggered_NoRandomSave
|
||||||
|
EpollTest.OneshotAndEdgeTriggered
|
||||||
|
EpollTest.CycleOfOneDisallowed
|
||||||
|
EpollTest.CycleOfThreeDisallowed
|
||||||
|
EpollTest.CloseFile
|
Reference in New Issue
Block a user