On 2/3/20 6:31 PM, David Hildenbrand wrote: > +void *qemu_ram_mmap_resize(void *ptr, int fd, size_t old_size, size_t > new_size, > + bool shared, bool is_pmem) > { > const size_t pagesize = mmap_pagesize(fd); > > /* we can only map whole pages */ > - size = QEMU_ALIGN_UP(size, pagesize); > + old_size = QEMU_ALIGN_UP(old_size, pagesize); > + new_size = QEMU_ALIGN_UP(new_size, pagesize); > + > + /* we support actually resizable memory regions only on Linux */ > + if (old_size < new_size) { > + /* populate the missing piece into the reserved area */ > + ptr = mmap_populate(ptr + old_size, new_size - old_size, fd, > old_size, > + shared, is_pmem); > + } else if (old_size > new_size) { > + /* discard this piece, keeping the area reserved (should never fail) > */ > + ptr = mmap_reserve(ptr + new_size, old_size - new_size, fd); > + } > + return ptr; > +}
What does the return value indicate? Is it just for != MAP_FAILED? Would we be better off with an assert? There's the comment re mmap_reserve, but I can't see why mmap_populate should fail either. Assuming an assert isn't viable, are we better off with a boolean return? With an Error **ptr? r~