Make PROCESS_FLAGS_CORE_ITEM only maintained for non-INDIRECT_CORE (moveable)
authorNick Downing <nick@ndcode.org>
Sun, 2 Jun 2019 03:56:16 +0000 (13:56 +1000)
committerNick Downing <nick@ndcode.org>
Sun, 2 Jun 2019 03:56:16 +0000 (13:56 +1000)
process.c

index f332672..91d2247 100644 (file)
--- a/process.c
+++ b/process.c
@@ -250,8 +250,8 @@ static bool do_swap_out(int swap_out) {
 #ifndef INDIRECT_CORE
       // remove from core pool
       pool_free(&core_table, &process->core_item);
-#endif /* ! INDIRECT_CORE */
       process->flags &= ~PROCESS_FLAGS_CORE_ITEM;
+#endif /* ! INDIRECT_CORE */
       victim = &lru_head;
 
       swap_out -= blocks;
@@ -326,7 +326,11 @@ bool process_alloc(struct process *process, int para, int paras) {
   process->lru_item.next->prev = &process->lru_item;
 
   // track total allocation
+#ifndef INDIRECT_CORE
   process->flags = PROCESS_FLAGS_ACTIVE | PROCESS_FLAGS_CORE_ITEM;
+#else /* INDIRECT_CORE */
+  process->flags = PROCESS_FLAGS_ACTIVE;
+#endif /* INDIRECT_CORE */
   process->para = para;
   process->paras = paras;
   process->swap_blocks = 0;
@@ -337,12 +341,14 @@ bool process_alloc(struct process *process, int para, int paras) {
 bool process_realloc(struct process *process, int paras, bool dir) {
   int old_blocks, para, blocks, blocks_change;
 
-  // must be already allocated and fully in core
-  assert(
-    (process->flags & (PROCESS_FLAGS_ACTIVE | PROCESS_FLAGS_CORE_ITEM)) ==
-      (PROCESS_FLAGS_ACTIVE | PROCESS_FLAGS_CORE_ITEM)
-  );
-  assert(process->lru_item.prev != NULL && process->swap_blocks == 0);
+  // must be already allocated
+  assert(process->flags & PROCESS_FLAGS_ACTIVE);
+
+  // must be fully in core
+#ifndef INDIRECT_CORE
+  assert(process->flags & PROCESS_FLAGS_CORE_ITEM);
+#endif /* ! INDIRECT_CORE */
+  assert(process->swap_blocks == 0);
 
   // check blocks
   old_blocks = process->swap_item.limit - process->swap_item.base;
@@ -465,7 +471,9 @@ void process_run(struct process *process) {
 
   // see whether fully in core
   if (process->lru_item.prev != NULL) {
+#ifndef INDIRECT_CORE
     assert(process->flags & PROCESS_FLAGS_CORE_ITEM);
+#endif /* INDIRECT_CORE */
     assert(process->swap_blocks == 0);
 
     // yes, remove from LRU list
@@ -478,7 +486,9 @@ void process_run(struct process *process) {
 
     // loop entry code for case of fully in swap
     if (victim != &process->lru_item) {
+#ifndef INDIRECT_CORE
       assert((process->flags & PROCESS_FLAGS_CORE_ITEM) == 0);
+#endif /* ! INDIRECT_CORE */
       assert(
         process->swap_blocks ==
           process->swap_item.limit - process->swap_item.base
@@ -506,8 +516,8 @@ void process_run(struct process *process) {
           POOL_ALLOC_MODE_MOVEABLE
         )
       );
-#endif /* ! INDIRECT_CORE */
       process->flags |= PROCESS_FLAGS_CORE_ITEM;
+#endif /* ! INDIRECT_CORE */
       goto loop_entry_full;
     }
     assert(process->swap_blocks);
@@ -658,7 +668,7 @@ void process_free(struct process *process) {
   // remove from LRU list
   if (victim == &process->lru_item)
     victim = &lru_head;
-  if (process->lru_item.prev != NULL) {
+  if (process->lru_item.prev) {
     process->lru_item.prev->next = process->lru_item.next;
     process->lru_item.next->prev = process->lru_item.prev;
   }