xref: /aosp_15_r20/external/crosvm/swap/tests/common/mod.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
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 Worker pub 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 Worker pub 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