mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-26 09:30:24 +00:00
Kernel: Also add a process boosting mechanism
Let's also have set_process_boost() for giving all threads in a process the same boost.
This commit is contained in:
parent
0dea0fd06f
commit
a69734bf2e
Notes:
sideshowbarker
2024-07-19 10:31:47 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/a69734bf2e4
6 changed files with 33 additions and 2 deletions
|
@ -3922,3 +3922,17 @@ int Process::sys$set_thread_boost(int tid, int amount)
|
|||
thread->set_priority_boost(amount);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Process::sys$set_process_boost(pid_t pid, int amount)
|
||||
{
|
||||
if (amount < 0 || amount > 20)
|
||||
return -EINVAL;
|
||||
InterruptDisabler disabler;
|
||||
auto* process = Process::from_pid(pid);
|
||||
if (!process || process->is_dead())
|
||||
return -ESRCH;
|
||||
if (!is_superuser() && process->uid() != euid())
|
||||
return -EPERM;
|
||||
process->m_priority_boost = amount;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -235,6 +235,7 @@ public:
|
|||
void* sys$get_kernel_info_page();
|
||||
int sys$futex(const Syscall::SC_futex_params*);
|
||||
int sys$set_thread_boost(int tid, int amount);
|
||||
int sys$set_process_boost(pid_t, int amount);
|
||||
|
||||
static void initialize();
|
||||
|
||||
|
@ -308,6 +309,8 @@ public:
|
|||
|
||||
int icon_id() const { return m_icon_id; }
|
||||
|
||||
u32 priority_boost() const { return m_priority_boost; }
|
||||
|
||||
private:
|
||||
friend class MemoryManager;
|
||||
friend class Scheduler;
|
||||
|
@ -396,6 +399,8 @@ private:
|
|||
|
||||
int m_icon_id { -1 };
|
||||
|
||||
u32 m_priority_boost { 0 };
|
||||
|
||||
WaitQueue& futex_queue(i32*);
|
||||
HashMap<u32, OwnPtr<WaitQueue>> m_futex_queues;
|
||||
};
|
||||
|
@ -520,3 +525,8 @@ inline const LogStream& operator<<(const LogStream& stream, const Process& proce
|
|||
{
|
||||
return stream << process.name() << '(' << process.pid() << ')';
|
||||
}
|
||||
|
||||
inline u32 Thread::effective_priority() const
|
||||
{
|
||||
return m_priority + m_process.priority_boost() + m_priority_boost + m_extra_priority;
|
||||
}
|
||||
|
|
|
@ -152,7 +152,8 @@ typedef u32 socklen_t;
|
|||
__ENUMERATE_SYSCALL(profiling_disable) \
|
||||
__ENUMERATE_SYSCALL(get_kernel_info_page) \
|
||||
__ENUMERATE_SYSCALL(futex) \
|
||||
__ENUMERATE_SYSCALL(set_thread_boost)
|
||||
__ENUMERATE_SYSCALL(set_thread_boost) \
|
||||
__ENUMERATE_SYSCALL(set_process_boost)
|
||||
|
||||
namespace Syscall {
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ public:
|
|||
void set_priority_boost(u32 boost) { m_priority_boost = boost; }
|
||||
u32 priority_boost() const { return m_priority_boost; }
|
||||
|
||||
u32 effective_priority() const { return m_priority + m_priority_boost + m_extra_priority; }
|
||||
u32 effective_priority() const;
|
||||
|
||||
void set_joinable(bool j) { m_is_joinable = j; }
|
||||
bool is_joinable() const { return m_is_joinable; }
|
||||
|
|
|
@ -34,6 +34,11 @@ int set_thread_boost(int tid, int amount)
|
|||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int set_process_boost(int tid, int amount)
|
||||
{
|
||||
int rc = syscall(SC_set_process_boost, tid, amount);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int futex(int32_t* userspace_address, int futex_op, int32_t value, const struct timespec* timeout)
|
||||
{
|
||||
|
|
|
@ -51,6 +51,7 @@ int profiling_disable(pid_t);
|
|||
#define THREAD_PRIORITY_MAX 99
|
||||
|
||||
int set_thread_boost(int tid, int amount);
|
||||
int set_process_boost(pid_t, int amount);
|
||||
|
||||
#define FUTEX_WAIT 1
|
||||
#define FUTEX_WAKE 2
|
||||
|
|
Loading…
Reference in a new issue