On 2013-05-07 16:17, Paolo Bonzini wrote: > With this change, a FlatView can be used even after a concurrent > update has replaced it. Because we do not have RCU, we use a > mutex to protect the small critical sections that read/write the > as->current_map pointer. Accesses to the FlatView can be done > outside the mutex. > > If a MemoryRegion will be used after the FlatView is unref-ed (or after > a MemoryListener callback is returned), a reference has to be added to > that MemoryRegion. For example, memory_region_find adds a reference to > the MemoryRegion that it returns.
For my understanding: Every lookup, e.g. triggered by address_space_rw, will briefly reference the FlatView of that address space and drop that reference again after referencing the target memory region. Provided that is true: If we run that lookup on an address space that happens to be modified in parallel, the lookup may actually cause the final deref and, thus, release of the FlatView - even if the target memory region was totally unrelated to the ongoing change. That could make a hot-path pay the price of an action a slow path caused. Not really a beautiful concept. Even if the FlatView finalization is a simple free() (that is the minimum), we would pull the memory allocator into code paths that might try hard to keep a safe distance for the sake of predictability. Jan -- Siemens AG, Corporate Technology, CT RTC ITP SDP-DE Corporate Competence Center Embedded Linux