Bläddra i källkod

Kernel: Use Userspace<T> for the clock_nanosleep syscall

Brian Gianforcaro 5 år sedan
förälder
incheckning
84035e1035
3 ändrade filer med 5 tillägg och 6 borttagningar
  1. 2 2
      Kernel/API/Syscall.h
  2. 1 1
      Kernel/Process.h
  3. 2 3
      Kernel/Syscalls/clock.cpp

+ 2 - 2
Kernel/API/Syscall.h

@@ -282,8 +282,8 @@ struct SC_poll_params {
 struct SC_clock_nanosleep_params {
     int clock_id;
     int flags;
-    const struct timespec* requested_sleep;
-    struct timespec* remaining_sleep;
+    Userspace<const struct timespec*> requested_sleep;
+    Userspace<struct timespec*> remaining_sleep;
 };
 
 struct SC_sendto_params {

+ 1 - 1
Kernel/Process.h

@@ -241,7 +241,7 @@ public:
     int sys$gettimeofday(Userspace<timeval*>);
     int sys$clock_gettime(clockid_t, timespec*);
     int sys$clock_settime(clockid_t, timespec*);
-    int sys$clock_nanosleep(const Syscall::SC_clock_nanosleep_params*);
+    int sys$clock_nanosleep(Userspace<const Syscall::SC_clock_nanosleep_params*>);
     int sys$gethostname(char*, ssize_t);
     int sys$sethostname(const char*, ssize_t);
     int sys$uname(utsname*);

+ 2 - 3
Kernel/Syscalls/clock.cpp

@@ -76,7 +76,7 @@ int Process::sys$clock_settime(clockid_t clock_id, timespec* user_ts)
     return 0;
 }
 
-int Process::sys$clock_nanosleep(const Syscall::SC_clock_nanosleep_params* user_params)
+int Process::sys$clock_nanosleep(Userspace<const Syscall::SC_clock_nanosleep_params*> user_params)
 {
     REQUIRE_PROMISE(stdio);
 
@@ -118,8 +118,7 @@ int Process::sys$clock_nanosleep(const Syscall::SC_clock_nanosleep_params* user_
                     return -EFAULT;
                 }
 
-                timespec remaining_sleep;
-                memset(&remaining_sleep, 0, sizeof(timespec));
+                timespec remaining_sleep = {};
                 remaining_sleep.tv_sec = ticks_left / TimeManagement::the().ticks_per_second();
                 ticks_left -= remaining_sleep.tv_sec * TimeManagement::the().ticks_per_second();
                 remaining_sleep.tv_nsec = ticks_left * 1000000000 / TimeManagement::the().ticks_per_second();