Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
google
GitHub Repository: google/crosvm
Path: blob/main/base/src/sys/linux/priority.rs
5394 views
1
// Copyright 2018 The ChromiumOS Authors
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
use std::mem::MaybeUninit;
6
7
use super::errno_result;
8
use super::Result;
9
10
/// Enables real time thread priorities in the current thread up to `limit`.
11
pub fn set_rt_prio_limit(limit: u64) -> Result<()> {
12
let rt_limit_arg = libc::rlimit64 {
13
rlim_cur: limit,
14
rlim_max: limit,
15
};
16
// SAFETY:
17
// Safe because the kernel doesn't modify memory that is accessible to the process here.
18
let res = unsafe { libc::setrlimit64(libc::RLIMIT_RTPRIO, &rt_limit_arg) };
19
20
if res != 0 {
21
errno_result()
22
} else {
23
Ok(())
24
}
25
}
26
27
/// Sets the current thread to be scheduled using the round robin real time class with `priority`.
28
pub fn set_rt_round_robin(priority: i32) -> Result<()> {
29
// SAFETY:
30
// Safe because sched_param only contains primitive types for which zero
31
// initialization is valid.
32
let mut sched_param: libc::sched_param = unsafe { MaybeUninit::zeroed().assume_init() };
33
sched_param.sched_priority = priority;
34
35
let res =
36
// SAFETY:
37
// Safe because the kernel doesn't modify memory that is accessible to the process here.
38
unsafe { libc::pthread_setschedparam(libc::pthread_self(), libc::SCHED_RR, &sched_param) };
39
40
if res != 0 {
41
errno_result()
42
} else {
43
Ok(())
44
}
45
}
46
47