From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35597) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aIdwX-0002VS-5c for qemu-devel@nongnu.org; Mon, 11 Jan 2016 09:59:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aIdwW-000439-9c for qemu-devel@nongnu.org; Mon, 11 Jan 2016 09:59:37 -0500 Sender: Paolo Bonzini References: <1447682723-3977-1-git-send-email-peter.maydell@linaro.org> <1447682723-3977-10-git-send-email-peter.maydell@linaro.org> <5693B259.2030106@redhat.com> From: Paolo Bonzini Message-ID: <5693C34E.1040204@redhat.com> Date: Mon, 11 Jan 2016 15:59:26 +0100 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH v2 09/19] exec.c: Use cpu_get_phys_page_attrs_debug List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: Patch Tracking , QEMU Developers , qemu-arm , "Edgar E. Iglesias" , =?UTF-8?Q?Alex_Benn=c3=a9e?= , =?UTF-8?Q?Andreas_F=c3=a4rber?= On 11/01/2016 15:18, Peter Maydell wrote: > On 11 January 2016 at 13:47, Paolo Bonzini wrote: >> >> >> On 16/11/2015 15:05, Peter Maydell wrote: >>> - hwaddr phys = cpu_get_phys_page_debug(cpu, pc); >>> + MemTxAttrs attrs = {}; >>> + hwaddr phys = cpu_get_phys_page_attrs_debug(cpu, pc, &attrs); >>> + int asidx = cpu_asidx_from_attrs(cpu, attrs); >>> if (phys != -1) { >>> - tb_invalidate_phys_addr(cpu->as, >>> + tb_invalidate_phys_addr(cpu->cpu_ases[asidx].as, >>> phys | (pc & ~TARGET_PAGE_MASK)); >>> } >> >> The only question I have is whether it is right to have empty MemTxAttrs >> here. Is there any way to use the MemTxAttrs for the "current state" of >> the CPU, whatever that is (on x86 I have added cpu_get_mem_attrs to >> target-i386/cpu.h)? > > That's what the call to cpu_get_phys_page_attrs_debug() does: > it fills in the MemTxAttrs :secure and :user fields, and then > cpu_asidx_from_attrs() uses the returned attributes to pick > the right address space. (cpu_get_phys_page_attrs_debug() > only fills in attribute fields it knows about, which is why > we pass it an empty attrs struct to start with.) Oops, that's not clear from the documentation in patch 4. But if that was the case, shouldn't cpu_get_phys_page_attrs_debug leave *attrs completely alone when using the fallback? I think it's clearer if you pass uninitialized MemTxAttrs to cpu_get_phys_page_attrs_debug, assuming you can do it. I can see why the current semantics make sense for helper.c's get_phys_addr, but I think they are confusing for the topmost function call. Paolo