Implement higher level macros to access process->core_item vs process->pool_item...
authorNick Downing <nick@ndcode.org>
Sun, 31 Mar 2019 07:43:24 +0000 (18:43 +1100)
committerNick Downing <nick@ndcode.org>
Sun, 31 Mar 2019 10:23:18 +0000 (21:23 +1100)
process.c
process.h

index a6f0f23..f4232ae 100644 (file)
--- a/process.c
+++ b/process.c
@@ -323,27 +323,9 @@ bool process_alloc(struct process *process, int size) {
 
   // allocate core and possible swap
 #ifdef MOVEABLE_CORE
-  rassert(
-    core_table_alloc(
-#ifdef PREALLOCATE_CORE
-      &process->core_item,
+  rassert(core_table_alloc(&PER_PROCESS_CORE_ITEM(process), size));
 #else
-      &process->pool_item,
-#endif
-      size
-    )
-  );
-#else
-  if (
-    !core_table_alloc(
-#ifdef PREALLOCATE_CORE
-      &process->core_item,
-#else
-      &process->pool_item,
-#endif
-      size
-    )
-  ) {
+  if (!core_table_alloc(&PER_PROCESS_CORE_ITEM(process), size)) {
 #if defined(PREALLOCATE_SWAP) && !defined(MOVEABLE_SWAP)
     swap_table_free(&process->swap_item);
 #endif
@@ -358,11 +340,7 @@ bool process_alloc(struct process *process, int size) {
   // populate new table with physical blocks
   rassert(
     core_block_alloc(
-#ifdef PREALLOCATE_CORE
-      core_table_mem + process->core_item.base,
-#else
-      core_table_mem + process->pool_item.base,
-#endif
+      core_table_mem + PER_PROCESS_CORE_ITEM(process).base,
       size
     )
   );
@@ -408,27 +386,9 @@ bool process_realloc(struct process *process, int size) {
 
   // reallocate core and possible swap
 #ifdef MOVEABLE_CORE
-  rassert(
-    core_table_realloc(
-#ifdef PREALLOCATE_CORE
-      &process->core_item,
-#else
-      &process->pool_item,
-#endif
-      size
-    )
-  );
-#else
-  if (
-    !core_table_realloc(
-#ifdef PREALLOCATE_CORE
-      &process->core_item,
+  rassert(core_table_realloc(&PER_PROCESS_CORE_ITEM(process), size));
 #else
-      &process->pool_item,
-#endif
-      size
-    )
-  ) {
+  if (!core_table_realloc(&PER_PROCESS_CORE_ITEM(process), size)) {
 #if defined(PREALLOCATE_SWAP) && !defined(MOVEABLE_SWAP)
     swap_table_free(&process->swap_item);
     rassert(swap_table_alloc(&process->swap_item, process->size));
@@ -446,21 +406,13 @@ bool process_realloc(struct process *process, int size) {
   if (size_change >= 0)
     rassert(
       core_block_alloc(
-#ifdef PREALLOCATE_CORE
-        core_table_mem + process->core_item.limit - size_change,
-#else
-        core_table_mem + process->pool_item.limit - size_change,
-#endif
+        core_table_mem + PER_PROCESS_CORE_ITEM(process).limit - size_change,
         size_change
       )
     );
   else
     core_block_free(
-#ifdef PREALLOCATE_CORE
-      core_table_mem + process->core_item.limit,
-#else
-      core_table_mem + process->pool_item.limit,
-#endif
+      core_table_mem + PER_PROCESS_CORE_ITEM(process).limit,
       -size_change
     );
 #endif
@@ -640,77 +592,57 @@ void process_free(struct process *process) {
     process->lru_item.prev->next = process->lru_item.next;
     process->lru_item.next->prev = process->lru_item.prev;
 
-#ifdef PREALLOCATE_CORE
 #ifdef INDIRECT_CORE
+    int core_base = PER_PROCESS_CORE_ITEM(process).base;
     core_block_free(
-      core_table_mem + process->core_item.base,
-      process->core_item.limit - process->core_item.base 
-    );
-#endif
-#else
-#ifdef INDIRECT_CORE
-    core_block_free(
-      core_table_mem + process->pool_item.base,
-      process->pool_item.limit - process->pool_item.base 
+      core_table_mem + core_base,
+      PER_PROCESS_CORE_ITEM(process).limit - core_base
     );
 #endif
+#ifndef PREALLOCATE_CORE
     core_table_free(&process->pool_item);
 #endif
   }
   else if (process == victim) {
     // victim, free the dedicated pool items
-    victim = NULL;
-#ifdef PREALLOCATE_CORE
 #ifdef INDIRECT_CORE
     core_block_free(
-      core_table_mem + process->core_item.base + victim_swap_size,
-      victim_core_size
-    );
-#endif
-    victim_core_size = 0;
+#ifdef PREALLOCATE_CORE
+      core_table_mem + victim->core_item.base + DEDICATED_SWAP_SIZE(victim),
 #else
-#ifdef INDIRECT_CORE
-    core_block_free(
       core_table_mem + victim_core_item.base,
-      victim_core_item.limit - victim_core_item.base
+#endif
+      DEDICATED_CORE_SIZE(victim)
     );
 #endif
+#ifdef PREALLOCATE_CORE
+    victim_core_size = 0;
+#else
     core_table_free(&victim_core_item);
 #endif
-#ifdef PREALLOCATE_SWAP
 #ifdef INDIRECT_SWAP
     swap_block_free(
-      swap_table_mem + process->swap_item.base,
-      victim_swap_size
+      swap_table_mem + DEDICATED_SWAP_ITEM(victim).base,
+      DEDICATED_SWAP_SIZE(victim)
     );
 #endif
+#ifdef PREALLOCATE_SWAP
     victim_swap_size = 0;
 #else
-#ifdef INDIRECT_SWAP
-    swap_block_free(
-      swap_table_mem + victim_swap_item.base,
-      victim_swap_item.limit - victim_swap_item.base
-    );
-#endif
     swap_table_free(&victim_swap_item);
 #endif
+    victim = NULL;
   }
   else {
     // fully in swap, remove from swap pool
-#ifdef PREALLOCATE_SWAP
-#ifdef INDIRECT_SWAP
-    swap_block_free(
-      swap_table_mem + process->swap_item.base,
-      process->swap_item.limit - process->swap_item.base 
-    );
-#endif
-#else
 #ifdef INDIRECT_SWAP
+    int swap_base = PER_PROCESS_SWAP_ITEM(process).base;
     swap_block_free(
-      swap_table_mem + process->pool_item.base,
-      process->pool_item.limit - process->pool_item.base 
+      swap_table_mem + swap_base,
+      PER_PROCESS_SWAP_ITEM(process).limit - swap_base
     );
 #endif
+#ifndef PREALLOCATE_SWAP
     swap_table_free(&process->pool_item);
 #endif
   }
index cc9e735..6bcd1dd 100644 (file)
--- a/process.h
+++ b/process.h
@@ -6,6 +6,38 @@
 //#define PREALLOCATE_CORE 1
 #define PREALLOCATE_SWAP 1
 
+#ifdef PREALLOCATE_CORE
+#define DEDICATED_CORE_ITEM(process) \
+  process->core_item
+#define DEDICATED_CORE_SIZE(process) \
+  process##_core_size
+#define PER_PROCESS_CORE_ITEM(process) \
+  (process)->core_item
+#else
+#define DEDICATED_CORE_ITEM(process) \
+  process##_core_item
+#define DEDICATED_CORE_SIZE(process) \
+  (process##_core_item.limit - process##_core_item.base)
+#define PER_PROCESS_CORE_ITEM(process) \
+  (process)->pool_item
+#endif
+
+#ifdef PREALLOCATE_SWAP
+#define DEDICATED_SWAP_ITEM(process) \
+  process->swap_item
+#define DEDICATED_SWAP_SIZE(process) \
+  process##_swap_size
+#define PER_PROCESS_SWAP_ITEM(process) \
+  (process)->swap_item
+#else
+#define DEDICATED_SWAP_ITEM(process) \
+  process##_swap_item
+#define DEDICATED_SWAP_SIZE(process) \
+  (process##_swap_item.limit - process##_swap_item.base)
+#define PER_PROCESS_SWAP_ITEM(process) \
+  (process)->pool_item
+#endif
+
 struct lru_item {
   struct lru_item *prev;
   struct lru_item *next;