X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Farch%2Fx86%2Fkpanic.c;h=ef2ad4cb8ec855adf33d5a8fc8d50c46283a6740;hb=86f855a3e417d93976af42dde36f457e89524902;hp=3e2ccacc21a9477a4abe81b22aebb69918b46cd1;hpb=934d0f535e1929fd90ae0606e77794484aa55284;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/arch/x86/kpanic.c b/KernelLand/Kernel/arch/x86/kpanic.c index 3e2ccacc..ef2ad4cb 100644 --- a/KernelLand/Kernel/arch/x86/kpanic.c +++ b/KernelLand/Kernel/arch/x86/kpanic.c @@ -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 }