@@ -342,6 +342,7 @@ int main() {
342342 while (1) {
343343 void* p = NULL;
344344 size_t len = storage_wait_paused(&p);
345+ memset(p, 0, len);
345346 strcpy((char*)p, "Data from storage");
346347 }
347348 return 1234;
@@ -369,7 +370,7 @@ extern long remote_resume(void* data, size_t len);
369370long test_remote() {
370371 for (int i = 0; i < 100; i++) {
371372 char buffer[8192];
372- remote_resume(buffer, sizeof(buffer) );
373+ remote_resume(buffer, 8192 );
373374 if (strcmp(buffer, "Data from storage") == 0) {
374375 continue;
375376 }
@@ -380,8 +381,7 @@ long test_remote() {
380381int main() {
381382 return test_remote();
382383}
383- )M" ,
384- " -Wl,--just-symbols=storage.syms" );
384+ )M" , " -Wl,--just-symbols=storage.syms" );
385385
386386 static bool is_waiting = false ;
387387 tinykvm::Machine::install_unhandled_syscall_handler (
@@ -438,8 +438,32 @@ int main() {
438438 REQUIRE (fork.has_remote ());
439439
440440 // Test remote resume
441- fork.vmcall (" test_remote" );
442- REQUIRE (fork.return_value () == 2345 );
443- REQUIRE (!fork.is_remote_connected ());
444- REQUIRE (fork.remote_connection_count () == 100 );
441+ for (int i = 0 ; i < 100 ; i++) {
442+ is_waiting = false ;
443+ fork.vmcall (" test_remote" );
444+ REQUIRE (fork.return_value () == 2345 );
445+ REQUIRE (!fork.is_remote_connected ());
446+ REQUIRE (fork.remote_connection_count () == (i + 1 ) * 100 );
447+ REQUIRE (is_waiting);
448+ }
449+
450+ // Test remote resume against a forked storage VM
451+ storage.prepare_copy_on_write ();
452+ tinykvm::Machine storage_fork (storage, {
453+ .max_mem = 16ULL << 20 , // MB
454+ .max_cow_mem = MAX_COWMEM,
455+ .split_hugepages = true
456+ });
457+ fork.remote_connect (storage_fork);
458+
459+ // Test remote resume against the forked storage VM
460+ printf (" Testing remote resume against forked storage VM\n " );
461+ for (int i = 0 ; i < 100 ; i++) {
462+ is_waiting = false ;
463+ fork.vmcall (" test_remote" );
464+ REQUIRE (fork.return_value () == 2345 );
465+ REQUIRE (!fork.is_remote_connected ());
466+ REQUIRE (fork.remote_connection_count () == 10000 + (i + 1 ) * 100 );
467+ REQUIRE (is_waiting);
468+ }
445469}
0 commit comments