[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-arm] [PATCH v2 09/19] exec.c: Use cpu_get_phys_page_attrs_debu
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-arm] [PATCH v2 09/19] exec.c: Use cpu_get_phys_page_attrs_debug |
Date: |
Mon, 11 Jan 2016 15:59:26 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 |
On 11/01/2016 15:18, Peter Maydell wrote:
> On 11 January 2016 at 13:47, Paolo Bonzini <address@hidden> 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