Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


HVM capability enhancement: asynchronous upcalls to ROS userspace
[palacios.git] / linux_usr / v3_mem.c
index 93a511f..1d987fc 100644 (file)
 
 #include "v3_ctrl.h"
 
+// set to zero to ignore, or set
+// to a level likely given the largest contiguous
+// page allocation outside of the base regions
+// note that the seed pools provide 2-4 MB chunks
+// to start
+#define PALACIOS_MIN_ALLOC (64*4096)
 
 #define SYS_PATH "/sys/devices/system/memory/"
 
@@ -153,24 +159,19 @@ int main(int argc, char * argv[]) {
     }
 
     if (op==ADD) {
-       mem_size_bytes = atoll(argv[optind]) * (1024 * 1024);
+       mem_size_bytes = (unsigned long long) (atof(argv[optind]) * (1024 * 1024));
 
-       if (mem_size_bytes > palacios_runtime_mem_block_size) { 
-           EPRINTF("Trying to add a larger single chunk of memory than Palacios can manage\n"
+       if (mem_size_bytes < palacios_runtime_mem_block_size ||
+           (PALACIOS_MIN_ALLOC!=0 && mem_size_bytes < PALACIOS_MIN_ALLOC)) {
+           EPRINTF("Trying to add a smaller single chunk of memory than Palacios needs\n"
                   "Your request:                        %llu bytes\n"
                   "Palacios run-time memory block size: %llu bytes\n",
-                  mem_size_bytes, palacios_runtime_mem_block_size);
+                  "Palacios minimal contiguous alloc:   %llu bytes\n",
+                   mem_size_bytes, palacios_runtime_mem_block_size,
+                   PALACIOS_MIN_ALLOC);
            return -1;
        }
 
-       if (mem_size_bytes < palacios_runtime_mem_block_size) { 
-           EPRINTF("Trying to add a smaller single chunk of memory than Palacios can manage\n"
-                  "Your request:                        %llu bytes\n"
-                  "Palacios run-time memory block size: %llu bytes\n",
-                  mem_size_bytes, palacios_runtime_mem_block_size);
-           return -1;
-       }
-       
        if (request && mem_size_bytes > kernel_max_page_alloc_bytes) { 
            EPRINTF("Trying to request a larger single chunk of memory than the kernel can allocate\n"
                   "Your request:                        %llu bytes\n"
@@ -655,7 +656,7 @@ static int offline_memory(unsigned long long mem_size_bytes,
                    return -1;
                }
 
-               status_buf[BUF_SIZE]=0;
+               status_buf[BUF_SIZE-1]=0;
                
                VPRINTF("Checking offlined block %d (%s)...", i + reg_start, fname);
                
@@ -814,7 +815,7 @@ static int write_offlined()
 
     fclose(off);
     if (!(off=fopen(offname,"w+"))) {  // truncate
-       EPRINTF("Cannot open %s for writing!\n");
+       EPRINTF("Cannot open %s for writing!\n",offname);
        return -1;
     }