From 5a380a6918a1e7cd282e0be951bbc55c8b5b8db9 Mon Sep 17 00:00:00 2001 From: Martin Xu Date: Tue, 31 Mar 2020 11:53:14 -0700 Subject: [PATCH] vmm: memory_manager: Support non-power-of-2 block sizes Replace alignment calculation of start address with functionally equivalent version that does not assume that the block size is a power of two. Signed-off-by: Martin Xu Signed-off-by: Rob Bradford --- vmm/src/memory_manager.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vmm/src/memory_manager.rs b/vmm/src/memory_manager.rs index 5c7a5a668..8e46fbcfb 100644 --- a/vmm/src/memory_manager.rs +++ b/vmm/src/memory_manager.rs @@ -282,9 +282,11 @@ impl MemoryManager { let mut virtiomem_resize = None; if let Some(size) = config.hotplug_size { if config.hotplug_method == HotplugMethod::VirtioMem { + // Alignment must be "natural" i.e. same as size of block let start_addr = GuestAddress( (start_of_device_area.0 + vm_virtio::VIRTIO_MEM_DEFAULT_BLOCK_SIZE - 1) - & (!(vm_virtio::VIRTIO_MEM_DEFAULT_BLOCK_SIZE - 1)), + / vm_virtio::VIRTIO_MEM_DEFAULT_BLOCK_SIZE + * vm_virtio::VIRTIO_MEM_DEFAULT_BLOCK_SIZE, ); virtiomem_region = Some(MemoryManager::create_ram_region( &config.file,