> In principle, yes, but you need to check the code carefully to make
> sure your type change doesn't change any of the results. (Or if it
> does, you then need to confirm against the specs that this was a bug
> that is being fixed, not a new one being introduced). The thing you have
> to remember is that for the 32 bit x86 cores guest physical addresses
> are only 32 bits but target_phys_addr_t is still a 64 bit type.
> It may be we're deliberately (mis)using target_ulong to get the
> right behaviour on both 32 and 64 bit cores.

  Just want to make a note here. According to Intel Software Developer's Manual
Volume 3A, 4.4.2 Linear-Address Translation with PAE Paging [1],

    A PDE is selected using the physical address defined as follows:

    - Bits 51:12 are from PDPTEi.

    - Bits 11:3 are bits 29:21 of the linear address.

    - Bits 2:0 are 0.

IIUC, pde_addr/pte_addr are 52-bit wide, but cpu_get_phys_page_debug
declares pde_addr/pte_addr as target_ulong, which is uint32_t for x86
guest. That might be a problem.

target_phys_addr_t cpu_get_phys_page_debug(CPUX86State *env, target_ulong addr)
{
    target_ulong pde_addr, pte_addr;

    ... snip ...
}

Regards,
chenwj
  
[1]
http://download.intel.com/products/processor/manual/253668.pdf

-- 
Wei-Ren Chen (陳韋任)
Computer Systems Lab, Institute of Information Science,
Academia Sinica, Taiwan (R.O.C.)
Tel:886-2-2788-3799 #1667
Homepage: http://people.cs.nctu.edu.tw/~chenwj

Reply via email to