qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Is the return address of get_page_addr_code guest physi


From: Steven
Subject: Re: [Qemu-devel] Is the return address of get_page_addr_code guest physical address?
Date: Fri, 10 Aug 2012 13:36:40 -0400

On Fri, Aug 10, 2012 at 11:47 AM, Peter Maydell
<address@hidden> wrote:
> On 10 August 2012 03:11, Steven <address@hidden> wrote:
>> The function definition has a return address type tb_page_addr_t.
>> tb_page_addr_t get_page_addr_code(CPUArchState *env1, target_ulong addr)
>>
>> I am wondering is this address the guest physical address or the host
>> virtual address.
>
> In linux-user mode the returned address is the guest virtual address.
> In system mode it is a ram_addr_t. (the comment above the implementation
> says "the returned address is not exactly the physical address: it
> is the offset relative to phys_ram_base" but this is out of date I think).
> A ram_addr_t is neither a host address nor a guest physical address
> but it's closely related to a guest physaddr (you can think of it as
> if all the RAM in the system was put into a straight line and then the
> ram_addr_t is an index into that).
So if I want to get the guest physical address (GPA) of a
tb_page_addr_t, can I do
           tb_page_addr_t = returned value from get_page_addr_code  +
phys_ram_base
Is this translation correct?

>
>> If it it is the guest physical address, why does Qemu waste guest
>> physical space to store these address for tb? Thanks.
>
> I'm not sure what you're asking here. This function returns a
> physical address because we store TCG translated code blocks in
> a hash table indexed by guest physaddr. Given the information
> "the CPU is trying to execute code from this physaddr" we need to
> be able to find out whether we already have a code block translated
> for that. (there is also a fast code path so we can avoid doing
> a complete lookup from physaddr most of the time.)
>
> -- PMM



reply via email to

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