Kernel: Add basic nanosleep, only millisecond percision

This commit is contained in:
Bananymous
2023-09-04 12:58:25 +03:00
parent b2139c0b1e
commit 9901f95d78
5 changed files with 17 additions and 0 deletions

View File

@@ -68,6 +68,7 @@ namespace Kernel
BAN::ErrorOr<long> sys_wait(pid_t pid, int* stat_loc, int options);
BAN::ErrorOr<long> sys_sleep(int seconds);
BAN::ErrorOr<long> sys_nanosleep(const timespec* rqtp, timespec* rmtp);
BAN::ErrorOr<long> sys_setenvp(char** envp);

View File

@@ -529,6 +529,13 @@ namespace Kernel
return 0;
}
BAN::ErrorOr<long> Process::sys_nanosleep(const timespec* rqtp, timespec* rmtp)
{
(void)rmtp;
SystemTimer::get().sleep(rqtp->tv_sec * 1000 + BAN::Math::div_round_up<uint64_t>(rqtp->tv_nsec, 1'000'000));
return 0;
}
BAN::ErrorOr<long> Process::sys_setenvp(char** envp)
{
LockGuard _(m_lock);

View File

@@ -182,6 +182,9 @@ namespace Kernel
case SYS_FCNTL:
ret = Process::current().sys_fcntl((int)arg1, (int)arg2, (int)arg3);
break;
case SYS_NANOSLEEP:
ret = Process::current().sys_nanosleep((const timespec*)arg1, (timespec*)arg2);
break;
default:
dwarnln("Unknown syscall {}", syscall);
break;