diff options
author | Jonas Schievink <jonas.schievink@ferrous-systems.com> | 2022-09-27 14:26:35 +0200 |
---|---|---|
committer | Jonas Schievink <jonas.schievink@ferrous-systems.com> | 2022-09-27 14:26:35 +0200 |
commit | 945f743aa7003b6cb6c646d9208713052cbc2701 (patch) | |
tree | 1db83427928731bab8c6dd2fcff6569a569a8293 | |
parent | be36bf05478ac40f92a01e1e8ec6aa11fad65d1f (diff) | |
download | nix-945f743aa7003b6cb6c646d9208713052cbc2701.zip |
Add a `sched_getcpu` wrapper
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | src/sched.rs | 7 | ||||
-rw-r--r-- | test/test_sched.rs | 6 |
3 files changed, 14 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 5982d70c..21d397e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ This project adheres to [Semantic Versioning](https://semver.org/). ## [Unreleased] - ReleaseDate ### Added +- Added `sched_getcpu` on platforms that support it. + ([#1825](https://github.com/nix-rust/nix/pull/1825)) - Added `sched_getaffinity` and `sched_setaffinity` on FreeBSD. ([#1804](https://github.com/nix-rust/nix/pull/1804)) - Added `line_discipline` field to `Termios` on Linux, Android and Haiku diff --git a/src/sched.rs b/src/sched.rs index 943ed6ec..aa2b90b4 100644 --- a/src/sched.rs +++ b/src/sched.rs @@ -290,6 +290,13 @@ mod sched_affinity { Errno::result(res).and(Ok(cpuset)) } + + /// Determines the CPU on which the calling thread is running. + pub fn sched_getcpu() -> Result<usize> { + let res = unsafe { libc::sched_getcpu() }; + + Errno::result(res).map(|int| int as usize) + } } /// Explicitly yield the processor to other threads. diff --git a/test/test_sched.rs b/test/test_sched.rs index ebf346db..c52616b8 100644 --- a/test/test_sched.rs +++ b/test/test_sched.rs @@ -1,4 +1,4 @@ -use nix::sched::{sched_getaffinity, sched_setaffinity, CpuSet}; +use nix::sched::{sched_getaffinity, sched_getcpu, sched_setaffinity, CpuSet}; use nix::unistd::Pid; #[test] @@ -30,6 +30,10 @@ fn test_sched_affinity() { ) } + // Now check that we're also currently running on the CPU in question. + let cur_cpu = sched_getcpu().unwrap(); + assert_eq!(cur_cpu, last_valid_cpu); + // Finally, reset the initial CPU set sched_setaffinity(Pid::from_raw(0), &initial_affinity).unwrap(); } |