Remove first/last transfer optimization, it will be done differently
authorNick Downing <nick@ndcode.org>
Fri, 31 May 2019 13:28:28 +0000 (23:28 +1000)
committerNick Downing <nick@ndcode.org>
Fri, 31 May 2019 13:28:28 +0000 (23:28 +1000)
process.c

index 6e899c0..139a2c7 100644 (file)
--- a/process.c
+++ b/process.c
@@ -127,13 +127,9 @@ static bool do_swap_out(int swap_out) {
 #else /* INDIRECT_CORE */
       core_base = victim->core_item.base + victim_swap_blocks;
 #endif /* INDIRECT_CORE */
-      size = (long)blocks << BLOCK_SHIFT;
-
-      // see if last transfer for victim
       victim_core_blocks -= blocks;
-      if (victim_core_blocks == 0)
-        // yes, correct size for partial last block
-        size += ((victim->size - 1L) | -BLOCK_SIZE) + 1L;
+      victim_swap_blocks += blocks;
+      size = (long)blocks << BLOCK_SHIFT;
 
       // transfer data to swap
 #ifndef INDIRECT_CORE
@@ -222,7 +218,6 @@ static bool do_swap_out(int swap_out) {
  printf("\n");
       block_pool_free(&core_block_pool, core_table_mem + core_base, blocks);
 #endif /* INDIRECT_CORE */
-      victim_swap_blocks += blocks;
 
       // see if victim fully swapped out
       if (victim_core_blocks) {
@@ -525,6 +520,7 @@ void process_run(struct process *process) {
 
     loop_entry_full:
       // calculate transfer parameters
+      process_core_blocks += blocks;
       process_swap_blocks -= blocks;
       swap_base = process->swap_item.base + process_swap_blocks;
 #ifndef INDIRECT_CORE
@@ -532,15 +528,8 @@ void process_run(struct process *process) {
 #else /* INDIRECT_CORE */
       core_base = process->core_item.base + process_swap_blocks;
 #endif /* INDIRECT_CORE */
-
       size = (long)blocks << BLOCK_SHIFT;
 
-      // see if first transfer for process
-      if (process_core_blocks == 0)
-        // yes, correct size for partial last block
-        size += ((process->size - 1L) | -BLOCK_SIZE) + 1L;
-      process_core_blocks += blocks;
-
       // transfer data to core
 #ifdef INDIRECT_CORE
       block_pool_alloc(&core_block_pool, core_table_mem + core_base, blocks);