diff options
author | David Carlier <devnexen@gmail.com> | 2021-05-09 18:02:22 +0100 |
---|---|---|
committer | David Carlier <devnexen@gmail.com> | 2021-05-12 22:15:06 +0100 |
commit | fc8f48f30c2f4cd18cddb5e64bd29f607bf5dd46 (patch) | |
tree | 644348d6efa6a914d2e3cbf47ce2986789a0d25a | |
parent | d56360a8aeecb20b301c37a8ac1661143c4afe85 (diff) | |
download | rust-libc-fc8f48f30c2f4cd18cddb5e64bd29f607bf5dd46.tar.gz |
freebsd update adding cpu affinity api subset
-rwxr-xr-x | libc-test/build.rs | 1 | ||||
-rw-r--r-- | src/unix/bsd/freebsdlike/freebsd/mod.rs | 56 |
2 files changed, 57 insertions, 0 deletions
diff --git a/libc-test/build.rs b/libc-test/build.rs index 446f1559a5..070be64a8c 100755 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -1724,6 +1724,7 @@ fn test_freebsd(target: &str) { "stdio.h", "stdlib.h", "string.h", + "sys/cpuset.h", "sys/event.h", "sys/extattr.h", "sys/file.h", diff --git a/src/unix/bsd/freebsdlike/freebsd/mod.rs b/src/unix/bsd/freebsdlike/freebsd/mod.rs index c2cc6d7430..484efe86e0 100644 --- a/src/unix/bsd/freebsdlike/freebsd/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/mod.rs @@ -14,6 +14,9 @@ pub type key_t = ::c_long; pub type msglen_t = ::c_ulong; pub type msgqnum_t = ::c_ulong; +pub type cpulevel_t = ::c_int; +pub type cpuwhich_t = ::c_int; + pub type mqd_t = *mut ::c_void; pub type posix_spawnattr_t = *mut ::c_void; pub type posix_spawn_file_actions_t = *mut ::c_void; @@ -121,6 +124,13 @@ s! { pub pve_fsid: u32, pub pve_path: *mut ::c_char, } + + pub struct cpuset_t { + #[cfg(target_pointer_width = "64")] + __bits: [::c_long; 4], + #[cfg(target_pointer_width = "32")] + __bits: [::c_long; 8], + } } s_no_extra_traits! { @@ -1265,6 +1275,38 @@ f! { pub fn uname(buf: *mut ::utsname) -> ::c_int { __xuname(256, buf as *mut ::c_void) } + + pub fn CPU_ZERO(cpuset: &mut cpuset_t) -> () { + for slot in cpuset.__bits.iter_mut() { + *slot = 0; + } + } + + pub fn CPU_FILL(cpuset: &mut cpuset_t) -> () { + for slot in cpuset.__bits.iter_mut() { + *slot = !0; + } + } + + pub fn CPU_SET(cpu: usize, cpuset: &mut cpuset_t) -> () { + let bitset_bits = ::mem::size_of::<::c_long>(); + let (idx, offset) = (cpu / bitset_bits, cpu % bitset_bits); + cpuset.__bits[idx] |= 1 << offset; + () + } + + pub fn CPU_CLR(cpu: usize, cpuset: &mut cpuset_t) -> () { + let bitset_bits = ::mem::size_of::<::c_long>(); + let (idx, offset) = (cpu / bitset_bits, cpu % bitset_bits); + cpuset.__bits[idx] &= !(1 << offset); + () + } + + pub fn CPU_ISSET(cpu: usize, cpuset: &mut cpuset_t) -> bool { + let bitset_bits = ::mem::size_of::<::c_long>(); + let (idx, offset) = (cpu / bitset_bits, cpu % bitset_bits); + 0 != cpuset.__bits[idx] & (1 << offset) + } } safe_f! { @@ -1527,6 +1569,20 @@ extern "C" { ) -> *mut ::c_void; pub fn nmount(iov: *mut ::iovec, niov: ::c_uint, flags: ::c_int) -> ::c_int; + pub fn cpuset_getaffinity( + level: cpulevel_t, + which: cpuwhich_t, + id: ::id_t, + setsize: ::size_t, + mask: *mut cpuset_t, + ) -> ::c_int; + pub fn cpuset_setaffinity( + level: cpulevel_t, + which: cpuwhich_t, + id: ::id_t, + setsize: ::size_t, + mask: *const cpuset_t, + ) -> ::c_int; } #[link(name = "util")] |