1 // Copyright 2022 The ChromiumOS Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 use base::MappedRegion; 6 use base::MemoryMapping; 7 use base::MemoryMappingBuilder; 8 use base::SharedMemory; 9 use swap::userfaultfd::Userfaultfd; 10 use userfaultfd::UffdBuilder; 11 create_uffd_for_test() -> Userfaultfd12pub fn create_uffd_for_test() -> Userfaultfd { 13 UffdBuilder::new() 14 .non_blocking(false) 15 .create() 16 .unwrap() 17 .into() 18 } 19 20 pub struct SharedMemoryMapping { 21 pub shm: SharedMemory, 22 pub mmap: MemoryMapping, 23 } 24 25 impl SharedMemoryMapping { base_addr(&self) -> usize26 pub fn base_addr(&self) -> usize { 27 self.mmap.as_ptr() as usize 28 } 29 } 30 create_shared_memory(name: &str, size: usize) -> SharedMemoryMapping31pub fn create_shared_memory(name: &str, size: usize) -> SharedMemoryMapping { 32 let shm = SharedMemory::new(name, size as u64).unwrap(); 33 let mmap = MemoryMappingBuilder::new(size) 34 .from_shared_memory(&shm) 35 .build() 36 .unwrap(); 37 SharedMemoryMapping { shm, mmap } 38 } 39