Changes between Version 1 and Version 8 of Ticket #8345

Jul 10, 2012, 5:57:41 AM (9 years ago)

I just noticed I hadn't commented on that one yet. While the issue itself isn't all that critical the underlying cause possibly is. The Map() method of the translation map maps a virtual address to a physical page. That is achieved by writing a respectively composed value (the physical page address mixed with flags for the access permissions and other stuff) into a respective page table entry (PTE). It is expected that when Map() is invoked that the virtual address is not already mapped to a physical page. That's what the assert checks (the "page present" flag of the PTE).

Since the new value is written to the PTE, it will be OK afterwards -- the panic is continuable -- but that the previous value got there is worrisome. Even more so since in this case the value is ~0, something never written by the paging code. So someone else wrote into that page table. Not a comforting thought.

Michael mentioned that he thinks that this happens when nearly exhausting physical pages. When it happens next time, please run a page_stats so we can verify the theory. Also, it would be interesting in what situation the assert was triggered. Like how long the machine ran and what you did before. Obviously a reproducible test case would be perfect.


  • Ticket #8345

    • Property Status newassigned
    • Property Cc smc.collins@… added
    • Property Priority normalcritical
    • Property Milestone R1R1/alpha4
    • Property Owner changed from axeld to bonefish
  • Ticket #8345 – Description

    v1 v8  
    44PANIC: ASSERT FAILED ... x86/paging/pae/x86VMTranslationMapPAE.cpp:231
     5(*entry & 0x0000000000000001LL) == 0; virtual address: 0x7ffef000, existing pte: 0xffffffffffffffff
    8 (*entry & 0x0000000000000001LL) == 0; virtual address: 0x7ffef00, existing pte: 0xfffffffffffffff
    9 }}}