On Thu, 27 Feb 2014 19:30:26 +0100 Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote: > Il 04/02/2014 19:41, Marcelo Tosatti ha scritto: > > > > -mem-prealloc asks to preallocate memory residing on -mem-path path. > > > > Currently QEMU exits in case: > > > > - Memory file has been created but allocation via explicit write > > fails. > > > > And it fallbacks to malloc in case: > > - Querying huge page size fails. > > - Lack of sync MMU support. > > - Open fails. > > - mmap fails. > > > > Have the same behaviour for all cases: fail in case -mem-path and > > -mem-prealloc are specified for regions where the requested size is > > suitable for hugepages. > > > > Signed-off-by: Marcelo Tosatti <mtosatti@xxxxxxxxxx> > > Once we introduce memdev, I believe -mem-path should always exit, and > never fall back to malloc/MAP_ANON. perhaps it should return a error instead of exit. Exit would be bad for hotplug case, hotplug op should fail and not crash machine. > For 2.0, I'm applying the patch to uq/master. > > Paolo > > > diff --git a/exec.c b/exec.c > > index 9ad0a4b..1da1ba7 100644 > > --- a/exec.c > > +++ b/exec.c > > @@ -996,7 +996,7 @@ static void *file_ram_alloc(RAMBlock *block, > > > > hpagesize = gethugepagesize(path); > > if (!hpagesize) { > > - return NULL; > > + goto error; > > } > > > > if (memory < hpagesize) { > > @@ -1005,7 +1005,7 @@ static void *file_ram_alloc(RAMBlock *block, > > > > if (kvm_enabled() && !kvm_has_sync_mmu()) { > > fprintf(stderr, "host lacks kvm mmu notifiers, -mem-path unsupported\n"); > > - return NULL; > > + goto error; > > } > > > > /* Make name safe to use with mkstemp by replacing '/' with '_'. */ > > @@ -1023,7 +1023,7 @@ static void *file_ram_alloc(RAMBlock *block, > > if (fd < 0) { > > perror("unable to create backing store for hugepages"); > > g_free(filename); > > - return NULL; > > + goto error; > > } > > unlink(filename); > > g_free(filename); > > @@ -1043,7 +1043,7 @@ static void *file_ram_alloc(RAMBlock *block, > > if (area == MAP_FAILED) { > > perror("file_ram_alloc: can't mmap RAM pages"); > > close(fd); > > - return (NULL); > > + goto error; > > } > > > > if (mem_prealloc) { > > @@ -1087,6 +1087,12 @@ static void *file_ram_alloc(RAMBlock *block, > > > > block->fd = fd; > > return area; > > + > > +error: > > + if (mem_prealloc) { > > + exit(1); > > + } > > + return NULL; > > } > > #else > > static void *file_ram_alloc(RAMBlock *block, > > > > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html