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


Reply via email to