[haiku-bugs] Re: [Haiku] #8345: PANIC: ASSERT FAILED ... x86/paging/pae/x86VMTranslationMapPAE.cpp:231

  • From: "bonefish" <trac@xxxxxxxxxxxx>
  • Date: Tue, 10 Jul 2012 05:57:41 -0000

#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.

Other related posts: