qemu-arm
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]