Skip to content

Commit d083603

Browse files
authored
Add MapFlags::hugetlb_with_size_log2 method (#847)
1 parent 08886a9 commit d083603

1 file changed

Lines changed: 25 additions & 0 deletions

File tree

src/mm/mmap.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,31 @@ pub use backend::mm::types::MlockFlags;
1616
pub use backend::mm::types::MremapFlags;
1717
pub use backend::mm::types::{MapFlags, MprotectFlags, ProtFlags};
1818

19+
impl MapFlags {
20+
/// Create `MAP_HUGETLB` with provided size of huge page.
21+
///
22+
/// Under the hood it computes `MAP_HUGETLB | (huge_page_size_log2 << MAP_HUGE_SHIFT)`.
23+
/// `huge_page_size_log2` denotes logarithm of huge page size to use and should be
24+
/// between 16 and 63 (inclusively).
25+
///
26+
/// ```
27+
/// use rustix::mm::MapFlags;
28+
///
29+
/// let f = MapFlags::hugetlb_with_size_log2(30).unwrap();
30+
/// assert_eq!(f, MapFlags::HUGETLB | MapFlags::HUGE_1GB);
31+
/// ```
32+
#[cfg(linux_kernel)]
33+
pub const fn hugetlb_with_size_log2(huge_page_size_log2: u32) -> Option<Self> {
34+
use linux_raw_sys::general::{MAP_HUGETLB, MAP_HUGE_SHIFT};
35+
if 16 <= huge_page_size_log2 && huge_page_size_log2 <= 63 {
36+
let bits = MAP_HUGETLB | (huge_page_size_log2 << MAP_HUGE_SHIFT);
37+
Self::from_bits(bits)
38+
} else {
39+
None
40+
}
41+
}
42+
}
43+
1944
/// `mmap(ptr, len, prot, flags, fd, offset)`—Create a file-backed memory
2045
/// mapping.
2146
///

0 commit comments

Comments
 (0)