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