diff --git a/crates/runtime/src/memfd.rs b/crates/runtime/src/memfd.rs index 16d41d1fb8..cf26e9b765 100644 --- a/crates/runtime/src/memfd.rs +++ b/crates/runtime/src/memfd.rs @@ -594,6 +594,10 @@ mod test { #[test] fn instantiate_no_image() { + if skip_tests_due_to_qemu_madvise_semantics() { + return; + } + // 4 MiB mmap'd area, not accessible let mut mmap = Mmap::accessible_reserved(0, 4 << 20).unwrap(); // Create a MemFdSlot on top of it @@ -626,6 +630,10 @@ mod test { #[test] fn instantiate_image() { + if skip_tests_due_to_qemu_madvise_semantics() { + return; + } + // 4 MiB mmap'd area, not accessible let mut mmap = Mmap::accessible_reserved(0, 4 << 20).unwrap(); // Create a MemFdSlot on top of it @@ -669,4 +677,19 @@ mod test { let slice = mmap.as_slice(); assert_eq!(&[1, 2, 3, 4], &slice[4096..4100]); } + + /// qemu's madvise implementation does not implement the + /// "flash-reset back to zero or CoW backing" semantics that Linux + /// does. Our CI setup uses qemu (in usermode-binary mode, not + /// whole-system mode) to run tests on aarch64 and s390x. We want + /// to skip these tests when under qemu, but not when someone is + /// developing natively on one of these architectures. So instead, + /// we dynamically detect an environment variable that our CI + /// setup sets. + /// + /// See `skip_pooling_allocator_tests()` in `tests/all/main.rs` + /// for more. + fn skip_tests_due_to_qemu_madvise_semantics() -> bool { + std::env::var("WASMTIME_TEST_NO_HOG_MEMORY").is_ok() + } }