Fix INDIRECT_CORE with INODE_SWAP combination
authorNick Downing <nick.downing@lifx.co>
Thu, 11 Apr 2019 11:12:55 +0000 (21:12 +1000)
committerNick Downing <nick.downing@lifx.co>
Thu, 11 Apr 2019 11:12:55 +0000 (21:12 +1000)
core.h
process.c
process_test_run.c

diff --git a/core.h b/core.h
index 2bc3d74..e8a9eca 100644 (file)
--- a/core.h
+++ b/core.h
@@ -4,9 +4,9 @@
 #include <stdint.h>
 #include "pool.h"
 
-//#define PREALLOCATE_CORE 1
-//#define INDIRECT_CORE 1
-#define MOVEABLE_CORE 1
+#define PREALLOCATE_CORE 1
+#define INDIRECT_CORE 1
+//#define MOVEABLE_CORE 1
 
 #ifdef MOVEABLE_CORE
 #define core_table_alloc(item, size) \
index 56a9092..fa6d8c5 100644 (file)
--- a/process.c
+++ b/process.c
@@ -72,8 +72,8 @@ void process_init(int n, int spare) {
     ((long)fs_tab[0].s_tfree << DISK_BLOCK_SHIFT);
 #ifdef PREALLOCATE_CORE
   core_table_avail = (long)core_table.avail << BLOCK_SHIFT;
-  if (process_avail > core_table.avail)
-    process_avail = core_table.avail;
+  if (process_avail > core_table_avail)
+    process_avail = core_table_avail;
 #endif
 #else
   process_avail = core_avail() + swap_avail() - spare;
@@ -198,9 +198,9 @@ static void do_swap_out(int swap_out) {
       rassert(swap_block_alloc(swap_table_mem + swap_base, blocks));
 #endif
 #ifdef INODE_SWAP
- printf("swap_write core [%d,%d) to swap [%d,%d)\n", core_base, core_base + blocks, victim_swap_blocks, victim_swap_blocks + blocks);
+ printf("write core [%d,%d) to swap [%d,%d)\n", core_base, core_base + blocks, victim_swap_blocks, victim_swap_blocks + blocks);
 #else
- printf("swap_write core [%d,%d) to swap [%d,%d)\n", core_base, core_base + blocks, swap_base, swap_base + blocks);
+ printf("write core [%d,%d) to swap [%d,%d)\n", core_base, core_base + blocks, swap_base, swap_base + blocks);
 #endif
 #if !defined(INDIRECT_CORE) && !defined(INDIRECT_SWAP)
 #ifdef INODE_SWAP
@@ -231,7 +231,7 @@ static void do_swap_out(int swap_out) {
           victim->swap_inode,
           (long)(victim_swap_blocks + i) << BLOCK_SHIFT,
           (long)core_block << BLOCK_SHIFT,
-          size;
+          BLOCK_SIZE
         );
 #else
         int swap_block = swap_base + i;
@@ -262,7 +262,7 @@ static void do_swap_out(int swap_out) {
           victim->swap_inode,
           (long)(victim_swap_blocks + i) << BLOCK_SHIFT,
           (long)core_block << BLOCK_SHIFT,
-          j;
+          j
         );
 #else
         int swap_block = swap_base + i;
@@ -372,7 +372,7 @@ bool process_alloc(struct process *process, long size) {
 #else
   if (!core_table_alloc(&process->core_item, blocks)) {
 #ifdef INODE_SWAP
-    i_deref(process->core_inode);
+    i_deref(process->swap_inode);
 #elif defined(PREALLOCATE_SWAP) && !defined(MOVEABLE_SWAP)
     swap_table_free(&process->swap_item);
 #endif
@@ -659,9 +659,9 @@ void process_run(struct process *process) {
       core_block_alloc(core_table_mem + core_base, blocks);
 #endif
 #ifdef INODE_SWAP
- printf("swap_read swap [%d,%d) to core [%d,%d)\n", process_swap_blocks, process_swap_blocks + blocks, core_base, core_base + blocks);
+ printf("read swap [%d,%d) to core [%d,%d)\n", process_swap_blocks, process_swap_blocks + blocks, core_base, core_base + blocks);
 #else
- printf("swap_read swap [%d,%d) to core [%d,%d)\n", swap_base, swap_base + blocks, core_base, core_base + blocks);
+ printf("read swap [%d,%d) to core [%d,%d)\n", swap_base, swap_base + blocks, core_base, core_base + blocks);
 #endif
 #if !defined(INDIRECT_CORE) && !defined(INDIRECT_SWAP)
 #ifdef INODE_SWAP
@@ -692,7 +692,7 @@ void process_run(struct process *process) {
           process->swap_inode,
           (long)(process_swap_blocks + i) << BLOCK_SHIFT,
           (long)core_block << BLOCK_SHIFT,
-          BLOCK_SIZE;
+          BLOCK_SIZE
         );
 #else
         int swap_block = swap_base + i;
@@ -723,7 +723,7 @@ void process_run(struct process *process) {
           process->swap_inode,
           (long)(process_swap_blocks + i) << BLOCK_SHIFT,
           (long)core_block << BLOCK_SHIFT,
-          BLOCK_SIZE;
+          j
         );
 #else
         int swap_block = swap_base + i;
@@ -823,7 +823,7 @@ void process_free(struct process *process) {
 #elif defined(INODE_SWAP)
     core_base =
       victim->core_item.base +
-      (int)(victim->swap_inode.c_node.i_size >> BLOCK_SHIFT);
+      (int)(victim->swap_inode->c_node.i_size >> BLOCK_SHIFT);
 #else
     core_base =
       victim->core_item.base +
index 589ff96..51e6a5f 100644 (file)
@@ -35,7 +35,6 @@ void core_hash_init(int process, long base, long size, long offset) {
     hash = (hash & 0xffffLL) + (hash >> 16);
     hash = (hash & 0xffLL) + (hash >> 8);
     hash = (hash & 0xffLL) + (hash >> 8);
- if (core_block_mem[addr] != 0xaa) printf("%ld\n", addr);
     rassert(core_block_mem[addr] == 0xaa);
     core_block_mem[addr] = (uint8_t)hash;
   }
@@ -139,7 +138,7 @@ void swap_read(
   long core_base,
   long size
 ) {
- //printf("read %ld %ld %ld\n", offset, core_base, size);
+ //printf("swap_read %d %ld %ld %ld\n", inode->c_num, offset, core_base, size);
   for (long i = 0; i < size; ++i)
     rassert(core_block_mem[core_base + i] == 0xaa);
 
@@ -162,7 +161,7 @@ void swap_write(
   long core_base,
   long size
 ) {
- //printf("write %ld %ld %ld\n", offset, core_base, size);
+ //printf("swap_write %d %ld %ld %ld\n", inode->c_num, offset, core_base, size);
   long count;
   for (long i = 0; (count = size - i) > 0; i += count) {
     if (count > TRANSFER_SIZE)