summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Carlier <devnexen@gmail.com>2021-05-09 18:02:22 +0100
committerDavid Carlier <devnexen@gmail.com>2021-05-12 22:15:06 +0100
commitfc8f48f30c2f4cd18cddb5e64bd29f607bf5dd46 (patch)
tree644348d6efa6a914d2e3cbf47ce2986789a0d25a
parentd56360a8aeecb20b301c37a8ac1661143c4afe85 (diff)
downloadrust-libc-fc8f48f30c2f4cd18cddb5e64bd29f607bf5dd46.tar.gz
freebsd update adding cpu affinity api subset
-rwxr-xr-xlibc-test/build.rs1
-rw-r--r--src/unix/bsd/freebsdlike/freebsd/mod.rs56
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")]