Fixed the RTC only firing once.
[tpg/acess2.git] / Kernel / arch / x86 / mm_virt.c
index 2b7d191..c930947 100644 (file)
@@ -41,6 +41,7 @@
 extern Uint32  gaInitPageDir[1024];
 extern Uint32  gaInitPageTable[1024];
 extern void    Threads_SegFault(Uint Addr);
+extern void    Error_Backtrace(Uint eip, Uint ebp);
 
 // === PROTOTYPES ===
 void   MM_PreinitVirtual();
@@ -127,7 +128,8 @@ void MM_PageFault(Uint Addr, Uint ErrorCode, tRegs *Regs)
        
        // If it was a user, tell the thread handler
        if(ErrorCode & 4) {
-               Warning("User Pagefault: Instruction at %p accessed %p\n", Regs->eip, Addr);
+               Warning("User Pagefault: Instruction at %p accessed %p", Regs->eip, Addr);
+               __asm__ __volatile__ ("sti");   // Restart IRQs
                Threads_SegFault(Addr);
                return ;
        }
@@ -145,12 +147,14 @@ void MM_PageFault(Uint Addr, Uint ErrorCode, tRegs *Regs)
                        );
        }
        
+       Log("Code at %p accessed %p", Regs->eip, Addr);
+       // Print Stack Backtrace
+       Error_Backtrace(Regs->eip, Regs->ebp);
+       
        Log("gaPageDir[0x%x] = 0x%x", Addr>>22, gaPageDir[Addr>>22]);
        if( gaPageDir[Addr>>22] & PF_PRESENT )
                Log("gaPageTable[0x%x] = 0x%x", Addr>>12, gaPageTable[Addr>>12]);
        
-       Log("Code at %p accessed %p\n", Regs->eip, Addr);
-       
        MM_DumpTables(0, -1);   
        
        Panic("Page Fault at 0x%x\n", Regs->eip);

UCC git Repository :: git.ucc.asn.au