On Mon, Feb 02, 2026 at 03:28:17PM +0100, BALATON Zoltan wrote:
> -bool memory_region_init_ram_flags_nomigrate(MemoryRegion *mr,
> - Object *owner,
> - const char *name,
> - uint64_t size,
> - uint32_t ram_flags,
> - Error **errp)
> +static bool memory_region_do_init_ram(MemoryRegion *mr,
> + Error *err, Error **errp)
I keep thinking taking two Errors here is almost not readable for an init
function. It only makes sense to me if it's something like
error_propagate(). E.g. we also have migrate_error_propagate(). I can't
think of anything that should pass in two Errors..
I'm not sure how bad it is we keep the old code as-is.. but if we really
want to provide some helpers, IMHO we should still avoid this, maybe:
memory_region_ram_setup(mr)
{
mr->ram = true;
mr->terminates = true;
mr->destructor = memory_region_destructor_ram;
}
memory_region_error_propagate(mr, err, errp)
{
mr->size = int128_zero();
object_unparent(OBJECT(mr));
error_propagate(errp, err);
}
Then taking one example:
memory_region_init_ram_flags_nomigrate()
{
Error *err = NULL;
memory_region_init(mr, owner, name, size);
memory_region_ram_setup(mr);
mr->ram_block = qemu_ram_alloc(size, ram_flags, mr, &err);
if (err) {
memory_region_error_propagate(mr, err, errp);
return false;
}
return true;
}
Thanks,
--
Peter Xu