On 2013-05-04 11:47, Paolo Bonzini wrote: > Il 03/05/2013 10:04, Jan Kiszka ha scritto: >> We can't change the semantics of opaque as long as old_mmio / old_portio >> are around. But we need a flag anyway to indicate if a region is >> depending on BQL or not. Adding a separate "Object *owner" to >> MemoryRegion can serve both purposes. Then we define something like >> >> void memory_region_set_local_locking(MemoryRegion *mr, >> bool local_locking, >> Object *owner); >> >> to control the property (if local_locking is true, owner must be >> non-NULL, of course). That's quite similar to my old prototype here that >> had memory_region_set/clear_global_locking. > > I think setting the owner can be done separately from enabling local > lock. For example, memory_region_find could also have a variant that > adds a ref to the owner. It would be very similar to what Ping Fan is > doing in the virtio-dataplane's HostMem data structure.
That's trivial to break up, but I'm not sure if there will be reasonable scenarios where a region requires reference counting without being able to work without the BQL. RAM, e.g., should always work BQL-free (once we have the infrastructure in place). And memory_region_find should likely always increment a reference if the target region has an owner. We should convert its users to properly dereference the region once done with it. Jan
signature.asc
Description: OpenPGP digital signature