From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47310) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZuhOs-0001uc-Jl for qemu-devel@nongnu.org; Fri, 06 Nov 2015 08:49:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZuhOp-00029J-5O for qemu-devel@nongnu.org; Fri, 06 Nov 2015 08:49:54 -0500 Date: Fri, 6 Nov 2015 14:49:46 +0100 From: "Edgar E. Iglesias" Message-ID: <20151106134946.GI13308@toto> References: <1446747358-18214-1-git-send-email-peter.maydell@linaro.org> <1446747358-18214-3-git-send-email-peter.maydell@linaro.org> <20151106132115.GB13308@toto> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Subject: Re: [Qemu-devel] [PATCH 02/16] exec.c: Allow target CPUs to define multiple AddressSpaces List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: Patch Tracking , QEMU Developers , qemu-arm@nongnu.org, Paolo Bonzini , Alex =?iso-8859-1?Q?Benn=E9e?= , Andreas =?iso-8859-1?Q?F=E4rber?= On Fri, Nov 06, 2015 at 01:34:44PM +0000, Peter Maydell wrote: > On 6 November 2015 at 13:21, Edgar E. Iglesias wrote: > > On Thu, Nov 05, 2015 at 06:15:44PM +0000, Peter Maydell wrote: > >> Allow multiple calls to cpu_address_space_init(); each > >> call adds an entry to the cpu->ases array at the specified > >> index. It is up to the target-specific CPU code to actually use > >> these extra address spaces. > >> > >> Since this multiple AddressSpace support won't work with > >> KVM, add an assertion to avoid confusing failures. > >> > >> Signed-off-by: Peter Maydell > > >> + if (asidx >= cpu->num_ases) { > >> + if (cpu->num_ases == 0) { > >> + cpu->cpu_ases = g_new(CPUAddressSpace, asidx + 1); > >> + } else { > >> + cpu->cpu_ases = g_renew(CPUAddressSpace, cpu->cpu_ases, asidx + 1); > > > > IIUC, g_renew may move the entire cpu_ases area. The internals of > > memory_listener_register (called below) seem to put away the pointers to listeners > > so a renew+move would leave invalid pointers to listeners in memory.c wouldn't it? > > > > There are various ways of solving this, (e.g dynamic allocation of the listener, > > static allocation of the cpu_ases, invalidate all listeners and restore them after > > each as init and more). I'm sure you'll figure something out. > > Oops, yes, you're right. > > Maybe we should just have the target CPU say in advance what the > maximum number of AddressSpaces it will have is -- my expectation > is that this will be (a) small (b) known in advance anyway. Yes, that sounds good to me. Cheers, Edgar