#8345: PANIC: ASSERT FAILED ... x86/paging/pae/x86VMTranslationMapPAE.cpp:231 -----------------------------+------------------------------------ Reporter: kallisti5 | Owner: bonefish Type: bug | Status: assigned Priority: critical | Milestone: R1/alpha4 Component: System/Kernel | Version: R1/Development Resolution: | Keywords: x86VMTranslationMapPAE Blocked By: | Blocking: Has a Patch: 0 | Platform: x86 -----------------------------+------------------------------------ Old description: > I've seen this a few times now randomly after doing lots of compiling > under Haiku GCC4... > > {{{ > PANIC: ASSERT FAILED ... x86/paging/pae/x86VMTranslationMapPAE.cpp:231 > > http://cgit.haiku- > os.org/haiku/tree/src/system/kernel/arch/x86/paging/pae/X86VMTranslationMapPAE.cpp?id=hrev43765#n229 > > (*entry & 0x0000000000000001LL) == 0; virtual address: 0x7ffef00, > existing pte: 0xfffffffffffffff > }}} New description: I've seen this a few times now randomly after doing lots of compiling under Haiku GCC4... {{{ PANIC: ASSERT FAILED ... x86/paging/pae/x86VMTranslationMapPAE.cpp:231 (*entry & 0x0000000000000001LL) == 0; virtual address: 0x7ffef000, existing pte: 0xffffffffffffffff }}} http://cgit.haiku- os.org/haiku/tree/src/system/kernel/arch/x86/paging/pae/X86VMTranslationMapPAE.cpp?id=hrev43765#n229 -- Comment (by bonefish): 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 URL: <http://dev.haiku-os.org/ticket/8345#comment:8> Haiku <http://dev.haiku-os.org> Haiku - the operating system.