mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-10-02 19:45:46 +00:00
39 lines
1.0 KiB
Rust
39 lines
1.0 KiB
Rust
|
// Copyright 2023 Arm Limited (or its affiliates). All rights reserved.
|
||
|
// SPDX-License-Identifier: Apache-2.0
|
||
|
|
||
|
use libc::{sysconf, _SC_PAGESIZE};
|
||
|
|
||
|
/// get host page size
|
||
|
pub fn get_page_size() -> u64 {
|
||
|
// SAFETY: FFI call. Trivially safe.
|
||
|
unsafe { sysconf(_SC_PAGESIZE) as u64 }
|
||
|
}
|
||
|
|
||
|
/// round up address to let it align page size
|
||
|
pub fn align_page_size_up(address: u64) -> u64 {
|
||
|
let page_size = get_page_size();
|
||
|
(address + page_size - 1) & !(page_size - 1)
|
||
|
}
|
||
|
|
||
|
/// round down address to let it align page size
|
||
|
pub fn align_page_size_down(address: u64) -> u64 {
|
||
|
let page_size = get_page_size();
|
||
|
address & !(page_size - 1)
|
||
|
}
|
||
|
|
||
|
/// Test if address is 4k aligned
|
||
|
pub fn is_4k_aligned(address: u64) -> bool {
|
||
|
(address & 0xfff) == 0
|
||
|
}
|
||
|
|
||
|
/// Test if size is 4k aligned
|
||
|
pub fn is_4k_multiple(size: u64) -> bool {
|
||
|
(size & 0xfff) == 0
|
||
|
}
|
||
|
|
||
|
/// Test if address is page size aligned
|
||
|
pub fn is_page_size_aligned(address: u64) -> bool {
|
||
|
let page_size = get_page_size();
|
||
|
address & (page_size - 1) == 0
|
||
|
}
|