Skip to content

Commit

Permalink
Change the MMAP test address. After the tests, unmap exactly what we
Browse files Browse the repository at this point in the history
mmap.
  • Loading branch information
qinsoon committed Mar 21, 2024
1 parent 12202aa commit d1a1841
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 19 deletions.
39 changes: 22 additions & 17 deletions src/util/heap/layout/byte_map_mmapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -229,16 +229,16 @@ mod tests {
#[test]
fn ensure_mapped_1page() {
serial_test(|| {
let pages = 1;
let start_chunk = ByteMapMmapper::address_to_mmap_chunks_down(FIXED_ADDRESS);
let end_chunk =
ByteMapMmapper::address_to_mmap_chunks_up(FIXED_ADDRESS + pages_to_bytes(pages));
let test_memory_size = (end_chunk - start_chunk) * MMAP_CHUNK_BYTES;
with_cleanup(
|| {
let mmapper = ByteMapMmapper::new();
let pages = 1;
mmapper.ensure_mapped(FIXED_ADDRESS, pages).unwrap();

let start_chunk = ByteMapMmapper::address_to_mmap_chunks_down(FIXED_ADDRESS);
let end_chunk = ByteMapMmapper::address_to_mmap_chunks_up(
FIXED_ADDRESS + pages_to_bytes(pages),
);
for chunk in start_chunk..end_chunk {
assert_eq!(
mmapper.mapped[chunk].load(Ordering::Relaxed),
Expand All @@ -247,7 +247,7 @@ mod tests {
}
},
|| {
memory::munmap(FIXED_ADDRESS, MAX_SIZE).unwrap();
memory::munmap(FIXED_ADDRESS, test_memory_size).unwrap();
},
)
})
Expand All @@ -256,16 +256,16 @@ mod tests {
#[test]
fn ensure_mapped_1chunk() {
serial_test(|| {
let pages = MMAP_CHUNK_BYTES >> LOG_BYTES_IN_PAGE as usize;
let start_chunk = ByteMapMmapper::address_to_mmap_chunks_down(FIXED_ADDRESS);
let end_chunk =
ByteMapMmapper::address_to_mmap_chunks_up(FIXED_ADDRESS + pages_to_bytes(pages));
let test_memory_size = (end_chunk - start_chunk) * MMAP_CHUNK_BYTES;
with_cleanup(
|| {
let mmapper = ByteMapMmapper::new();
let pages = MMAP_CHUNK_BYTES >> LOG_BYTES_IN_PAGE as usize;
mmapper.ensure_mapped(FIXED_ADDRESS, pages).unwrap();

let start_chunk = ByteMapMmapper::address_to_mmap_chunks_down(FIXED_ADDRESS);
let end_chunk = ByteMapMmapper::address_to_mmap_chunks_up(
FIXED_ADDRESS + pages_to_bytes(pages),
);
for chunk in start_chunk..end_chunk {
assert_eq!(
mmapper.mapped[chunk].load(Ordering::Relaxed),
Expand All @@ -274,7 +274,7 @@ mod tests {
}
},
|| {
memory::munmap(FIXED_ADDRESS, MAX_SIZE).unwrap();
memory::munmap(FIXED_ADDRESS, test_memory_size).unwrap();
},
)
})
Expand All @@ -283,11 +283,14 @@ mod tests {
#[test]
fn ensure_mapped_more_than_1chunk() {
serial_test(|| {
let pages = (MMAP_CHUNK_BYTES + MMAP_CHUNK_BYTES / 2) >> LOG_BYTES_IN_PAGE as usize;
let start_chunk = ByteMapMmapper::address_to_mmap_chunks_down(FIXED_ADDRESS);
let end_chunk =
ByteMapMmapper::address_to_mmap_chunks_up(FIXED_ADDRESS + pages_to_bytes(pages));
let test_memory_size = (end_chunk - start_chunk) * MMAP_CHUNK_BYTES;
with_cleanup(
|| {
let mmapper = ByteMapMmapper::new();
let pages =
(MMAP_CHUNK_BYTES + MMAP_CHUNK_BYTES / 2) >> LOG_BYTES_IN_PAGE as usize;
mmapper.ensure_mapped(FIXED_ADDRESS, pages).unwrap();

let start_chunk = ByteMapMmapper::address_to_mmap_chunks_down(FIXED_ADDRESS);
Expand All @@ -303,7 +306,7 @@ mod tests {
}
},
|| {
memory::munmap(FIXED_ADDRESS, MAX_SIZE).unwrap();
memory::munmap(FIXED_ADDRESS, test_memory_size).unwrap();
},
)
})
Expand All @@ -312,6 +315,7 @@ mod tests {
#[test]
fn protect() {
serial_test(|| {
let test_memory_size = MMAP_CHUNK_BYTES * 2;
with_cleanup(
|| {
// map 2 chunks
Expand All @@ -335,7 +339,7 @@ mod tests {
);
},
|| {
memory::munmap(FIXED_ADDRESS, MAX_SIZE).unwrap();
memory::munmap(FIXED_ADDRESS, test_memory_size).unwrap();
},
)
})
Expand All @@ -344,6 +348,7 @@ mod tests {
#[test]
fn ensure_mapped_on_protected_chunks() {
serial_test(|| {
let test_memory_size = MMAP_CHUNK_BYTES * 2;
with_cleanup(
|| {
// map 2 chunks
Expand Down Expand Up @@ -380,7 +385,7 @@ mod tests {
);
},
|| {
memory::munmap(FIXED_ADDRESS, MAX_SIZE).unwrap();
memory::munmap(FIXED_ADDRESS, test_memory_size).unwrap();
},
)
})
Expand Down
4 changes: 2 additions & 2 deletions src/util/test_util/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ mod test {
}
}

// Test with an address that works for 32bits.
// Test with an address that works for 32bits. The address is chosen empirically.
#[cfg(target_os = "linux")]
const TEST_ADDRESS: Address =
crate::util::conversions::chunk_align_down(unsafe { Address::from_usize(0x6000_0000) });
crate::util::conversions::chunk_align_down(unsafe { Address::from_usize(0x7000_0000) });
#[cfg(target_os = "macos")]
const TEST_ADDRESS: Address =
crate::util::conversions::chunk_align_down(unsafe { Address::from_usize(0x2_0000_0000) });
Expand Down

0 comments on commit d1a1841

Please sign in to comment.