On 2 June 2013 16:43, Paolo Bonzini <pbonz...@redhat.com> wrote: > Reference counting the region piggybacks on reference counting of a QOM > object, the "owner" of the region. The owner API is designed so that > it will be called as little as possible. Unowned subregions will get a > region if memory_region_set_owner is called after the subregion is added. > This is in general the common case already; often setting the owner can > be delegated to a bus-specific API that already takes a DeviceState > (for example pci_register_bar or sysbus_init_mmio).
This feels a bit fragile to me -- there doesn't seem to be a clear rule for who has to set the owner of a region or when they have to do it, or for ensuring that it doesn't get forgotten altogether. What happens if I take a MemoryRegion* that another device has exposed to me as a sysbus mmio region (and so claimed ownership of) and pass it to pci_register_bar()? Who owns it at that point? [That's a legitimate thing to do, I think, though I don't suppose anybody does it at the moment. Sysbus MMIOs aren't only for mapping in the system address space, they're a general way for one device to expose a MemoryRegion * for use by another device.] thanks -- PMM