mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2025-02-11 12:35:26 +00:00
39 lines
1.2 KiB
Rust
39 lines
1.2 KiB
Rust
|
// Copyright 2018 The Chromium OS Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
use {errno_result, Result};
|
||
|
|
||
|
/// Enables real time thread priorities in the current thread up to `limit`.
|
||
|
pub fn set_rt_prio_limit(limit: u64) -> Result<()> {
|
||
|
let rt_limit_arg = libc::rlimit {
|
||
|
rlim_cur: limit as libc::rlim_t,
|
||
|
rlim_max: limit as libc::rlim_t,
|
||
|
};
|
||
|
// Safe because the kernel doesn't modify memory that is accessible to the process here.
|
||
|
let res = unsafe { libc::setrlimit(libc::RLIMIT_RTPRIO, &rt_limit_arg) };
|
||
|
|
||
|
if res != 0 {
|
||
|
errno_result()
|
||
|
} else {
|
||
|
Ok(())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// Sets the current thread to be scheduled using the round robin real time class with `priority`.
|
||
|
pub fn set_rt_round_robin(priority: i32) -> Result<()> {
|
||
|
let sched_param = libc::sched_param {
|
||
|
sched_priority: priority,
|
||
|
};
|
||
|
|
||
|
// Safe because the kernel doesn't modify memory that is accessible to the process here.
|
||
|
let res =
|
||
|
unsafe { libc::pthread_setschedparam(libc::pthread_self(), libc::SCHED_RR, &sched_param) };
|
||
|
|
||
|
if res != 0 {
|
||
|
errno_result()
|
||
|
} else {
|
||
|
Ok(())
|
||
|
}
|
||
|
}
|