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 #[allow(dead_code)] 22 pub shm: SharedMemory, 23 pub mmap: MemoryMapping, 24 } 25 26 impl SharedMemoryMapping { base_addr(&self) -> usize27 pub fn base_addr(&self) -> usize { 28 self.mmap.as_ptr() as usize 29 } 30 } 31 create_shared_memory(name: &str, size: usize) -> SharedMemoryMapping32pub fn create_shared_memory(name: &str, size: usize) -> SharedMemoryMapping { 33 let shm = SharedMemory::new(name, size as u64).unwrap(); 34 let mmap = MemoryMappingBuilder::new(size) 35 .from_shared_memory(&shm) 36 .build() 37 .unwrap(); 38 SharedMemoryMapping { shm, mmap } 39 } 40