Kernel/x86 - Fix not restoring registers in Proc_CloneInt
[tpg/acess2.git] / KernelLand / Kernel / arch / x86 / kpanic.c
index 3e2ccac..ef2ad4c 100644 (file)
@@ -77,18 +77,27 @@ const struct {
  */
 void KernelPanic_SetMode(void)
 {
-        int    i;
-
        __asm__ __volatile__ ("cli");   // Stop the processor!
        
        // This function is called by Panic(), but MM_PageFault and the
        // CPU exception handers also call it, so let's not clear the screen
        // twice
        if( giKP_Pos )  return ;
+
+       #if USE_MP
+       // Send halt to all processors
+       for( int i = 0; i < giNumCPUs; i ++ )
+       {
+               if(i == GetCPUNum())    continue ;
+               FB[i] = BGC|('A'+i);
+               MP_SendIPIVector(i, 0xED);
+       }
+       #endif
        
+       #if ENABLE_KPANIC_MODE
        // Restore VGA 0xB8000 text mode
-       #if 1
-       for( i = 0; i < NUM_REGVALUES; i++ )
+       #if 0
+       for( int i = 0; i < NUM_REGVALUES; i++ )
        {
                // Reset Flip-Flop
                if( caRegValues[i].IdxPort == 0x3C0 )   inb(0x3DA);
@@ -101,19 +110,9 @@ void KernelPanic_SetMode(void)
        inb(0x3DA);
        outb(0x3C0, 0x20);
        #endif
-
-       #if USE_MP
-       // Send halt to all processors
-       for( i = 0; i < giNumCPUs; i ++ )
-       {
-               if(i == GetCPUNum())    continue ;
-               FB[i] = BGC|('A'+i);
-               MP_SendIPIVector(i, 0xED);
-       }
-       #endif
        
        // Clear Screen
-       for( i = 0; i < 80*25; i++ )
+       for( int i = 0; i < 80*25; i++ )
        {
                FB[i] = BGC;
        }
@@ -124,10 +123,12 @@ void KernelPanic_SetMode(void)
                __asm__ __volatile__ ("mov %%ebp, %0" : "=r" (ebp));
                Error_Backtrace(eip, ebp);
        }
+       #endif
 }
 
 void KernelPanic_PutChar(char Ch)
 {
+       #if ENABLE_KPANIC_MODE
        if( giKP_Pos > 80*25 )  return ;
        switch(Ch)
        {
@@ -153,4 +154,11 @@ void KernelPanic_PutChar(char Ch)
                giKP_Pos ++;
                break;
        }
+       #if 0
+       {
+               char    s[2] = {Ch,0};
+               VT_int_PutString(gpVT_CurTerm, s);
+       }
+       #endif
+       #endif // ENABLE_KPANIC_MODE
 }

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