From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:43665) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UZmCO-0005ZM-30 for qemu-devel@nongnu.org; Tue, 07 May 2013 14:01:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UZmCJ-0005rj-Cf for qemu-devel@nongnu.org; Tue, 07 May 2013 14:01:12 -0400 Received: from goliath.siemens.de ([192.35.17.28]:18046) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UZmCJ-0005rP-3U for qemu-devel@nongnu.org; Tue, 07 May 2013 14:01:07 -0400 Message-ID: <5189415B.5070108@siemens.com> Date: Tue, 07 May 2013 20:00:59 +0200 From: Jan Kiszka MIME-Version: 1.0 References: <1367936238-12196-1-git-send-email-pbonzini@redhat.com> <1367936238-12196-41-git-send-email-pbonzini@redhat.com> In-Reply-To: <1367936238-12196-41-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 40/40] memory: add reference counting to FlatView List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: "aik@ozlabs.ru" , "david@gibson.dropbear.id.au" , "qemu-devel@nongnu.org" , "stefanha@redhat.com" , "qemulist@gmail.com" 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