X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_usr%2Fv3_mem.c;h=4d08bd4fd666873c027b8923914f6d4d03b7df24;hb=68f8c4cd303c5da40c1083cbabdaf6395e4dbaa1;hp=b30b3447ab21f0280b6312fccd7b0cc2a40e0d4a;hpb=471edd59ca70371e97cbad759e1710433f35990d;p=palacios.git diff --git a/linux_usr/v3_mem.c b/linux_usr/v3_mem.c index b30b344..4d08bd4 100644 --- a/linux_usr/v3_mem.c +++ b/linux_usr/v3_mem.c @@ -17,6 +17,12 @@ #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*4096ULL) #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 run-time memory block size: %llu bytes\n" + "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" @@ -391,7 +392,7 @@ static int offline_memory(unsigned long long mem_size_bytes, - VPRINTF("Trying to find %dMB (%d bytes) of memory above %llu with limit32=%d\n", mem_size_bytes/(1024*1024), mem_size_bytes, mem_min_start, limit32); + VPRINTF("Trying to find %lluMB (%llu bytes) of memory above %llu with limit32=%d\n", mem_size_bytes/(1024*1024), mem_size_bytes, mem_min_start, limit32); /* Figure out the block size */ { @@ -705,7 +706,7 @@ static int online_memory(unsigned long long base_addr, unsigned int block_size_bytes = 0; int bitmap_entries = 0; unsigned char * bitmap = NULL; - int num_blocks = 0; + unsigned int num_blocks = 0; int reg_start = 0; int mem_ready = 0; @@ -743,7 +744,7 @@ static int online_memory(unsigned long long base_addr, reg_start = base_addr / block_size_bytes; - VPRINTF("That is %lu blocks of size %llu starting at block %d\n", num_blocks, block_size_bytes, reg_start); + VPRINTF("That is %u blocks of size %u starting at block %d\n", num_blocks, block_size_bytes, reg_start);