<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<i><tt>> crash> rd -u 0x400000</tt></i>
<br><i><tt>> rd: invalid user virtual address: 400000  type: "64-bit
UVADDR"</tt></i><tt></tt>
<p><tt>Ah, damn it -- it would also be printed later on in</tt>
<br><tt>readmem() if uvtop() fails:</tt><tt></tt>
<p><tt>        while (size > 0) {</tt>
<br><tt>               
switch (memtype)</tt>
<br><tt>               
{</tt>
<br><tt>               
case UVADDR:</tt>
<br><tt>                       
if (!uvtop(CURRENT_CONTEXT(), addr, &paddr, 0)) {</tt>
<br><tt>                               
if (PRINT_ERROR_MESSAGE)</tt>
<br><tt>                                       
error(INFO, INVALID_UVADDR, addr, type);</tt>
<br><tt>                               
goto readmem_error;</tt>
<br><tt>                       
}</tt>
<br><tt>                       
break;</tt><tt></tt>
<p><tt>That's probably where it's happening...</tt><tt></tt>
<p><tt>I would guess that x86_64_uvtop() needs to immediately</tt>
<br><tt>recognize if the new VM scheme is in place, and if so</tt>
<br><tt>it should veer off to a new "x86_64_uvtop_lev4()" routine.</tt><tt></tt>
<p><tt>We definitely want to keep the current one untouched, while</tt>
<br><tt>the new one must need a 4th layer of page table translation.</tt>
<br><tt>Note that x86_64_kvtop() has the extra FILL_PML4() stuff</tt>
<br><tt>before the 3-level breakdown -- I guess that's why vmalloc</tt>
<br><tt>addresses still translate.  But there must be another layer</tt>
<br><tt>user virtual addresses need to go through.</tt><tt></tt>
<p><tt>Dave</tt></html>