Skip to content

Commit ea0b012

Browse files
committed
refactor: introduce mib_to_bytes helper
Left-shifting by 20 to convert MiB to bytes is ubiquitous in our codebase, but probably somewhat arcane to people not familiar with low level stuff. Let's define a helper for the conversion. Signed-off-by: Patrick Roy <[email protected]>
1 parent 441edc8 commit ea0b012

File tree

8 files changed

+28
-14
lines changed

8 files changed

+28
-14
lines changed

src/vmm/src/arch/x86_64/mod.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ use linux_loader::loader::elf::start_info::{
3535

3636
use crate::arch::{BootProtocol, InitrdConfig, SYSTEM_MEM_SIZE, SYSTEM_MEM_START};
3737
use crate::device_manager::resources::ResourceAllocator;
38-
use crate::utils::u64_to_usize;
38+
use crate::utils::{mib_to_bytes, u64_to_usize};
3939
use crate::vstate::memory::{
4040
Address, GuestAddress, GuestMemory, GuestMemoryMmap, GuestMemoryRegion,
4141
};
@@ -71,7 +71,7 @@ pub enum ConfigurationError {
7171
pub const FIRST_ADDR_PAST_32BITS: u64 = 1 << 32;
7272

7373
/// Size of MMIO gap at top of 32-bit address space.
74-
pub const MEM_32BIT_GAP_SIZE: u64 = 768 << 20;
74+
pub const MEM_32BIT_GAP_SIZE: u64 = mib_to_bytes(768) as u64;
7575
/// The start of the memory area reserved for MMIO devices.
7676
pub const MMIO_MEM_START: u64 = FIRST_ADDR_PAST_32BITS - MEM_32BIT_GAP_SIZE;
7777
/// The size of the memory area reserved for MMIO devices.
@@ -397,7 +397,7 @@ mod tests {
397397
);
398398

399399
// Now assigning some memory that falls before the 32bit memory hole.
400-
let mem_size = 128 << 20;
400+
let mem_size = mib_to_bytes(128);
401401
let gm = arch_mem(mem_size);
402402
let mut resource_allocator = ResourceAllocator::new().unwrap();
403403
configure_system(
@@ -422,7 +422,7 @@ mod tests {
422422
.unwrap();
423423

424424
// Now assigning some memory that is equal to the start of the 32bit memory hole.
425-
let mem_size = 3328 << 20;
425+
let mem_size = mib_to_bytes(3328);
426426
let gm = arch_mem(mem_size);
427427
let mut resource_allocator = ResourceAllocator::new().unwrap();
428428
configure_system(
@@ -447,7 +447,7 @@ mod tests {
447447
.unwrap();
448448

449449
// Now assigning some memory that falls after the 32bit memory hole.
450-
let mem_size = 3330 << 20;
450+
let mem_size = mib_to_bytes(3330);
451451
let gm = arch_mem(mem_size);
452452
let mut resource_allocator = ResourceAllocator::new().unwrap();
453453
configure_system(

src/vmm/src/builder.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1050,6 +1050,7 @@ pub(crate) mod tests {
10501050
use crate::mmds::data_store::{Mmds, MmdsVersion};
10511051
use crate::mmds::ns::MmdsNetworkStack;
10521052
use crate::test_utils::{single_region_mem, single_region_mem_at};
1053+
use crate::utils::mib_to_bytes;
10531054
use crate::vmm_config::balloon::{BALLOON_DEV_ID, BalloonBuilder, BalloonDeviceConfig};
10541055
use crate::vmm_config::boot_source::DEFAULT_KERNEL_CMDLINE;
10551056
use crate::vmm_config::drive::{BlockBuilder, BlockDeviceConfig};
@@ -1113,7 +1114,7 @@ pub(crate) mod tests {
11131114
}
11141115

11151116
pub(crate) fn default_vmm() -> Vmm {
1116-
let (kvm, mut vm, guest_memory) = setup_vm_with_memory(128 << 20);
1117+
let (kvm, mut vm, guest_memory) = setup_vm_with_memory(mib_to_bytes(128));
11171118

11181119
let mmio_device_manager = MMIODeviceManager::new();
11191120
let acpi_device_manager = ACPIDeviceManager::new();

src/vmm/src/devices/virtio/vsock/event_handler.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,9 +477,10 @@ mod tests {
477477
use crate::arch::x86_64::{FIRST_ADDR_PAST_32BITS, MEM_32BIT_GAP_SIZE};
478478
use crate::devices::virtio::vsock::packet::VSOCK_PKT_HDR_SIZE;
479479
use crate::test_utils::multi_region_mem;
480+
use crate::utils::mib_to_bytes;
480481
use crate::vstate::memory::GuestAddress;
481482

482-
const MIB: usize = 1 << 20;
483+
const MIB: usize = mib_to_bytes(1);
483484

484485
let mut test_ctx = TestContext::new();
485486
test_ctx.mem = multi_region_mem(&[

src/vmm/src/resources.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use crate::logger::info;
1313
use crate::mmds;
1414
use crate::mmds::data_store::{Mmds, MmdsVersion};
1515
use crate::mmds::ns::MmdsNetworkStack;
16+
use crate::utils::mib_to_bytes;
1617
use crate::utils::net::ipv4addr::is_link_local_valid;
1718
use crate::vmm_config::balloon::*;
1819
use crate::vmm_config::boot_source::{
@@ -462,7 +463,8 @@ impl VmResources {
462463
self.machine_config.huge_pages,
463464
)
464465
} else {
465-
let regions = crate::arch::arch_memory_regions(self.machine_config.mem_size_mib << 20);
466+
let regions =
467+
crate::arch::arch_memory_regions(mib_to_bytes(self.machine_config.mem_size_mib));
466468
GuestMemoryMmap::anonymous(
467469
regions.into_iter(),
468470
self.machine_config.track_dirty_pages,

src/vmm/src/utils/mod.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ pub mod sm;
1313
use std::num::Wrapping;
1414
use std::result::Result;
1515

16+
/// How many bits to left-shift by to convert MiB to bytes
17+
const MIB_TO_BYTES_SHIFT: usize = 20;
18+
1619
/// Return the default page size of the platform, in bytes.
1720
pub fn get_page_size() -> Result<usize, vmm_sys_util::errno::Error> {
1821
// SAFETY: Safe because the parameters are valid.
@@ -45,3 +48,8 @@ pub const fn usize_to_u64(num: usize) -> u64 {
4548
pub const fn wrap_usize_to_u32(num: usize) -> Wrapping<u32> {
4649
Wrapping(((num as u64) & 0xFFFFFFFF) as u32)
4750
}
51+
52+
/// Converts MiB to Bytes
53+
pub const fn mib_to_bytes(mib: usize) -> usize {
54+
mib << MIB_TO_BYTES_SHIFT
55+
}

src/vmm/src/vstate/memory.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use vmm_sys_util::errno;
2323

2424
use crate::DirtyBitmap;
2525
use crate::arch::arch_memory_regions;
26-
use crate::utils::{get_page_size, u64_to_usize};
26+
use crate::utils::{get_page_size, mib_to_bytes, u64_to_usize};
2727
use crate::vmm_config::machine_config::HugePageConfig;
2828

2929
/// Type of GuestMemoryMmap.
@@ -72,7 +72,7 @@ where
7272
huge_pages: HugePageConfig,
7373
) -> Result<Self, MemoryError> {
7474
let memfd_file = create_memfd(mem_size_mib, huge_pages.into())?.into_file();
75-
let regions = arch_memory_regions(mem_size_mib << 20).into_iter();
75+
let regions = arch_memory_regions(mib_to_bytes(mem_size_mib)).into_iter();
7676

7777
Self::create(
7878
regions,
@@ -330,7 +330,7 @@ fn create_memfd(
330330
size: usize,
331331
hugetlb_size: Option<memfd::HugetlbSize>,
332332
) -> Result<memfd::Memfd, MemoryError> {
333-
let mem_size = size << 20;
333+
let mem_size = mib_to_bytes(size);
334334
// Create a memfd.
335335
let opts = memfd::MemfdOptions::default()
336336
.hugetlb(hugetlb_size)
@@ -713,7 +713,7 @@ mod tests {
713713
#[test]
714714
fn test_create_memfd() {
715715
let size = 1;
716-
let size_mb = 1 << 20;
716+
let size_mb = mib_to_bytes(1) as u64;
717717

718718
let memfd = create_memfd(size, None).unwrap();
719719

src/vmm/src/vstate/vcpu/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,7 @@ pub(crate) mod tests {
786786
use crate::devices::BusDevice;
787787
use crate::devices::bus::DummyDevice;
788788
use crate::seccomp::get_empty_filters;
789+
use crate::utils::mib_to_bytes;
789790
use crate::utils::signal::validate_signal_num;
790791
use crate::vstate::kvm::Kvm;
791792
use crate::vstate::memory::{GuestAddress, GuestMemoryMmap};
@@ -973,7 +974,7 @@ pub(crate) mod tests {
973974
fn vcpu_configured_for_boot() -> (VcpuHandle, EventFd, GuestMemoryMmap) {
974975
Vcpu::register_kick_signal_handler();
975976
// Need enough mem to boot linux.
976-
let mem_size = 64 << 20;
977+
let mem_size = mib_to_bytes(64);
977978
let (kvm, _, mut vcpu, vm_mem) = setup_vcpu(mem_size);
978979

979980
let vcpu_exit_evt = vcpu.exit_evt.try_clone().unwrap();

src/vmm/src/vstate/vm/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ impl Vm {
143143
pub(crate) mod tests {
144144
use super::*;
145145
use crate::test_utils::single_region_mem;
146+
use crate::utils::mib_to_bytes;
146147
use crate::vstate::kvm::Kvm;
147148
use crate::vstate::memory::GuestMemoryMmap;
148149

@@ -197,7 +198,7 @@ pub(crate) mod tests {
197198
#[test]
198199
fn test_create_vcpus() {
199200
let vcpu_count = 2;
200-
let (_, mut vm, _) = setup_vm_with_memory(128 << 20);
201+
let (_, mut vm, _) = setup_vm_with_memory(mib_to_bytes(128));
201202

202203
let (vcpu_vec, _) = vm.create_vcpus(vcpu_count).unwrap();
203204

0 commit comments

Comments
 (0)