Change process->in_core_blocks to process->in_core_block relative to block_base
authorNick Downing <nick@ndcode.org>
Sat, 8 Jun 2019 01:31:15 +0000 (11:31 +1000)
committerNick Downing <nick@ndcode.org>
Sat, 8 Jun 2019 01:31:15 +0000 (11:31 +1000)
process.c
process.h

index f8d4f45..68296cb 100644 (file)
--- a/process.c
+++ b/process.c
@@ -136,7 +136,7 @@ static bool do_swap_out(int swap_out) {
     // adjust swap pointer
     calc.in_core_block -= blocks;
 #ifdef INDIRECT_CORE
-    process->in_core_blocks = calc.in_core_block - calc.block_base;
+    process->in_core_block = calc.in_core_block;
 #endif
 
     // transfer data to swap
@@ -257,7 +257,8 @@ bool process_alloc(struct process *process, int para_base, int para_limit) {
   process->para_base = para_base;
   process->para_limit = para_limit;
 #ifdef INDIRECT_CORE
-  process->in_core_blocks = blocks;
+  process->in_core_block =
+    (para_limit + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT;
 #endif
   process_avail -= blocks;
   return true;
@@ -278,8 +279,8 @@ bool process_realloc(struct process *process, int para_base_limit, bool dir) {
   );
 #else
   assert(
-    process->in_core_blocks ==
-      process->swap_item.limit - process->swap_item.base
+    process->in_core_block ==
+      (process->para_limit + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT
   );
 #endif /* ! INDIRECT_CORE */
 
@@ -368,7 +369,8 @@ bool process_realloc(struct process *process, int para_base_limit, bool dir) {
   // track total allocation
   *(dir ? &process->para_base : &process->para_limit) = para_base_limit;
 #ifdef INDIRECT_CORE
-  process->in_core_blocks = blocks;
+  process->in_core_block =
+    (process->para_limit + (BLOCK_PARAS - 1)) >> BLOCK_PARAS_SHIFT;
 #endif
   process_avail -= blocks_change;
   return true;
@@ -448,7 +450,7 @@ void process_run(struct process *process) {
     // adjust swap pointer
     calc.in_core_block += blocks;
 #ifdef INDIRECT_CORE
-    process->in_core_blocks = calc.in_core_block - calc.block_base;
+    process->in_core_block = calc.in_core_block;
 #endif /* INDIRECT_CORE */
   }
 
@@ -481,7 +483,8 @@ void process_free(struct process *process) {
       process->core_item.limit - process->core_item.base :
       0;
 #else /* INDIRECT_CORE */
-  block = process->in_core_blocks;
+  block =
+    process->in_core_block - (process->para_base >> BLOCK_PARAS_SHIFT);
 #endif /* INDIRECT_CORE */
   swap_in =
     process->swap_item.limit - process->swap_item.base - block;
@@ -498,7 +501,7 @@ void process_free(struct process *process) {
 #ifdef INDIRECT_SWAP
     block
 #else /* ! INDIRECT_SWAP */
-    process->in_core_blocks
+    process->in_core_block - (process->para_base >> BLOCK_PARAS_SHIFT)
 #endif /* ! INDIRECT_SWAP */
   );
   pool_free(&core_table, &process->core_item);
@@ -554,7 +557,7 @@ void process_calc(struct process *process, struct process_calc *calc) {
   ) - calc->core_origin;
  //printf("para [%d,%d) in_core_blocks %d block [%d,%d) core_origin %d swap_origin %d in_core_block %d\n", process->para_base, process->para_limit, process->flags & PROCESS_FLAGS_CORE_ITEM ? process->core_item.limit - process->core_item.base : 0, calc->block_base, calc->block_limit, calc->core_origin, calc->swap_origin, calc->in_core_block);
 #else
-  calc->in_core_block = calc->block_base + process->in_core_blocks;
+  calc->in_core_block = process->in_core_block;
  //printf("para [%d,%d) in_core_blocks %d block [%d,%d) core_origin %d swap_origin %d in_core_block %d\n", process->para_base, process->para_limit, process->in_core_blocks, calc->block_base, calc->block_limit, calc->core_origin, calc->swap_origin, calc->in_core_block);
 #endif
 }
index 1d14601..838da3b 100644 (file)
--- a/process.h
+++ b/process.h
@@ -35,7 +35,7 @@ struct process {
   int para_base;
   int para_limit;
 #ifdef INDIRECT_CORE
-  int in_core_blocks;
+  int in_core_block;
 #endif
 };