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