Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
mc: inline two functions
[simgrid.git] / src / mc / sosp / mc_checkpoint.cpp
index 0ae2a09..9951c16 100644 (file)
@@ -65,7 +65,16 @@ static void restore(RegionSnapshot* region)
       break;
 
     case simgrid::mc::StorageType::Chunked:
-      mc_region_restore_sparse(&mc_model_checker->process(), region);
+      xbt_assert(((region->permanent_address().address()) & (xbt_pagesize - 1)) == 0, "Not at the beginning of a page");
+      xbt_assert(simgrid::mc::mmu::chunkCount(region->size()) == region->page_data().page_count());
+
+      for (size_t i = 0; i != region->page_data().page_count(); ++i) {
+        void* target_page =
+            (void*)simgrid::mc::mmu::join(i, (std::uintptr_t)(void*)region->permanent_address().address());
+        const void* source_page = region->page_data().page(i);
+        mc_model_checker->process().write_bytes(source_page, xbt_pagesize, remote(target_page));
+      }
+
       break;
 
     case simgrid::mc::StorageType::Privatized:
@@ -92,12 +101,12 @@ RegionSnapshot privatized_region(RegionType region_type, void* start_addr, void*
   mc_model_checker->process().read_bytes(&privatization_regions, sizeof(privatization_regions),
                                          remote(remote_smpi_privatization_regions));
 
-  std::vector<simgrid::mc::RegionSnapshot> data;
+  std::vector<RegionSnapshot> data;
   data.reserve(process_count);
   for (size_t i = 0; i < process_count; i++)
-    data.push_back(simgrid::mc::region(region_type, start_addr, privatization_regions[i].address, size));
+    data.push_back(region(region_type, start_addr, privatization_regions[i].address, size));
 
-  simgrid::mc::RegionSnapshot region = simgrid::mc::RegionSnapshot(region_type, start_addr, permanent_addr, size);
+  RegionSnapshot region = RegionSnapshot(region_type, start_addr, permanent_addr, size);
   region.privatized_data(std::move(data));
   return region;
 }