diff --git a/Kernel/Syscalls/sched.cpp b/Kernel/Syscalls/sched.cpp index a9351bb27b..f5db4eadbf 100644 --- a/Kernel/Syscalls/sched.cpp +++ b/Kernel/Syscalls/sched.cpp @@ -75,8 +75,15 @@ ErrorOr Process::sys$scheduler_set_parameters(Userspaceis_superuser() && credentials->euid() != peer_credentials->uid() && credentials->uid() != peer_credentials->uid()) return EPERM; - // FIXME: Only sets priority for main thread of process if mode == PROCESS peer->set_priority((u32)parameters.parameters.sched_priority); + // POSIX says that process scheduling parameters have precedence over thread scheduling parameters. + // We don't track them separately, so overwrite the thread scheduling settings manually for now. + if (parameters.mode == Syscall::SchedulerParametersMode::Process) { + peer->process().for_each_thread([&](auto& thread) { + thread.set_priority((u32)parameters.parameters.sched_priority); + }); + } + return 0; }