Просмотр исходного кода

change(syscall): add tgkill and rename some syscall definitions

greatbridf 7 месяцев назад
Родитель
Сommit
d9e144bbb0
2 измененных файлов с 14 добавлено и 2 удалено
  1. 1 2
      crates/posix_types/src/syscall_no/loongarch64.rs
  2. 13 0
      src/kernel/syscall/procops.rs

+ 1 - 2
crates/posix_types/src/syscall_no/loongarch64.rs

@@ -112,7 +112,7 @@ pub const SYS_TIMER_GETOVERRUN: usize = 109;
 pub const SYS_TIMER_SETTIME32: usize = 110;
 pub const SYS_TIMER_SETTIME32: usize = 110;
 pub const SYS_TIMER_DELETE: usize = 111;
 pub const SYS_TIMER_DELETE: usize = 111;
 pub const SYS_CLOCK_SETTIME32: usize = 112;
 pub const SYS_CLOCK_SETTIME32: usize = 112;
-pub const SYS_CLOCK_GETTIME32: usize = 113;
+pub const SYS_CLOCK_GETTIME: usize = 113;
 pub const SYS_CLOCK_GETRES_TIME32: usize = 114;
 pub const SYS_CLOCK_GETRES_TIME32: usize = 114;
 pub const SYS_CLOCK_NANOSLEEP_TIME32: usize = 115;
 pub const SYS_CLOCK_NANOSLEEP_TIME32: usize = 115;
 pub const SYS_SYSLOG: usize = 116;
 pub const SYS_SYSLOG: usize = 116;
@@ -280,7 +280,6 @@ pub const SYS_IO_PGETEVENTS_TIME32: usize = 292;
 pub const SYS_RSEQ: usize = 293;
 pub const SYS_RSEQ: usize = 293;
 pub const SYS_KEXEC_FILE_LOAD: usize = 294;
 pub const SYS_KEXEC_FILE_LOAD: usize = 294;
 // 64-bit time syscalls
 // 64-bit time syscalls
-pub const SYS_CLOCK_GETTIME: usize = 403;
 pub const SYS_CLOCK_SETTIME: usize = 404;
 pub const SYS_CLOCK_SETTIME: usize = 404;
 pub const SYS_CLOCK_ADJTIME: usize = 405;
 pub const SYS_CLOCK_ADJTIME: usize = 405;
 pub const SYS_CLOCK_GETRES: usize = 406;
 pub const SYS_CLOCK_GETRES: usize = 406;

+ 13 - 0
src/kernel/syscall/procops.rs

@@ -541,6 +541,19 @@ fn tkill(tid: u32, sig: u32) -> KResult<()> {
     Ok(())
     Ok(())
 }
 }
 
 
+#[eonix_macros::define_syscall(SYS_TGKILL)]
+fn tgkill(tgid: u32, tid: u32, sig: u32) -> KResult<()> {
+    let procs = Task::block_on(ProcessList::get().read());
+
+    let thread_to_kill = procs.try_find_thread(tid).ok_or(ESRCH)?;
+    if thread_to_kill.process.pid != tgid {
+        return Err(ESRCH);
+    }
+
+    thread_to_kill.raise(Signal::try_from_raw(sig)?);
+    Ok(())
+}
+
 #[eonix_macros::define_syscall(SYS_RT_SIGPROCMASK)]
 #[eonix_macros::define_syscall(SYS_RT_SIGPROCMASK)]
 fn rt_sigprocmask(
 fn rt_sigprocmask(
     how: u32,
     how: u32,