From: Ben Gras Date: Fri, 22 Jul 2011 13:01:44 +0000 (+0200) Subject: Revert "print kernel stacktrace for exceptions in kernel" X-Git-Tag: v3.2.0~424 X-Git-Url: http://zhaoyanbai.com/repos/%22../static/icons/mdoc.3.txt?a=commitdiff_plain;h=b984fa41df5adde6dc853b2719466de0568655f6;p=minix.git Revert "print kernel stacktrace for exceptions in kernel" This reverts commit eff1369cab8fc04802c43231ec8ac2445d0a29da. This was in a working branch and I only intended to commit exception.c. But I committed the exact inverse. Sorry. --- diff --git a/common/include/arch/i386/archtypes.h b/common/include/arch/i386/archtypes.h index e16f77801..fb424c977 100644 --- a/common/include/arch/i386/archtypes.h +++ b/common/include/arch/i386/archtypes.h @@ -37,7 +37,6 @@ struct fpu_state_s { /* fpu_image includes 512 bytes of image itself and * additional 15 bytes required for manual 16-byte alignment. */ char fpu_image[527]; - u32_t checksum; }; #define INMEMORY(p) (!p->p_seg.p_cr3 || get_cpulocal_var(ptproc) == p) diff --git a/kernel/Makefile b/kernel/Makefile index 02293d05e..ee76ca38a 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -14,7 +14,7 @@ SRCS += smp.c .endif DPADD+= ${LIBTIMERS} ${LIBSYS} ${LIBEXEC} -LDADD+= -ltimers -lsys -lexec -lz +LDADD+= -ltimers -lsys -lexec CFLAGS += -D__kernel__ diff --git a/kernel/arch/i386/arch_system.c b/kernel/arch/i386/arch_system.c index a7f230573..2c32b82c6 100644 --- a/kernel/arch/i386/arch_system.c +++ b/kernel/arch/i386/arch_system.c @@ -58,27 +58,6 @@ FORWARD _PROTOTYPE( void ser_dump_proc_cpu, (void)); FORWARD _PROTOTYPE( void ser_init, (void)); #endif -PRIVATE u32_t fpusum(struct proc *p) -{ - void *save_area = p->p_fpu_state.fpu_save_area_p; - return crc32(0, save_area, FPU_XFP_SIZE); -} - -PUBLIC void fpu_makechecksum(struct proc *p) -{ - p->p_fpu_state.checksum = fpusum(p); -} - -PUBLIC void fpu_verifychecksum(struct proc *p) -{ - static int n; - n++; - if(p->p_fpu_state.checksum != fpusum(p)) { - printf("%d / %s fpu state broken!", p->p_endpoint, p->p_name); - util_stacktrace(); - } -} - PUBLIC __dead void arch_monitor(void) { monitor(); @@ -273,23 +252,16 @@ PUBLIC void fpu_init(void) PUBLIC void save_local_fpu(struct proc *pr) { - static int n; - phys_bytes save_area = (phys_bytes) pr->p_fpu_state.fpu_save_area_p; if(!is_fpu()) return; - /* save area must be 16-byte aligned */ - assert(!(save_area % FPUALIGN)); - /* Save changed FPU context. */ if(osfxsr_feature) { - fxsave(save_area); + fxsave(pr->p_fpu_state.fpu_save_area_p); fninit(); } else { - fnsave(save_area); + fnsave(pr->p_fpu_state.fpu_save_area_p); } - - fpu_makechecksum(pr); } PUBLIC void save_fpu(struct proc *pr) @@ -332,14 +304,10 @@ PUBLIC void restore_fpu(struct proc *pr) fninit(); pr->p_misc_flags |= MF_FPU_INITIALIZED; } else { - phys_bytes save_area = (phys_bytes) pr->p_fpu_state.fpu_save_area_p; - /* save area must be 16-byte aligned */ - assert(!(save_area % FPUALIGN)); - fpu_verifychecksum(pr); if(osfxsr_feature) { - fxrstor(save_area); + fxrstor(pr->p_fpu_state.fpu_save_area_p); } else { - frstor(save_area); + frstor(pr->p_fpu_state.fpu_save_area_p); } } } diff --git a/kernel/arch/i386/include/arch_proto.h b/kernel/arch/i386/include/arch_proto.h index fb5666123..af605c6ed 100644 --- a/kernel/arch/i386/include/arch_proto.h +++ b/kernel/arch/i386/include/arch_proto.h @@ -95,10 +95,10 @@ _PROTOTYPE( void ia32_msr_read, (u32_t reg, u32_t * hi, u32_t * lo) ); _PROTOTYPE( void ia32_msr_write, (u32_t reg, u32_t hi, u32_t lo) ); _PROTOTYPE( void fninit, (void)); _PROTOTYPE( void clts, (void)); -_PROTOTYPE( void fxsave, (vir_bytes)); -_PROTOTYPE( void fnsave, (vir_bytes)); -_PROTOTYPE( void fxrstor, (vir_bytes)); -_PROTOTYPE( void frstor, (vir_bytes)); +_PROTOTYPE( void fxsave, (void *)); +_PROTOTYPE( void fnsave, (void *)); +_PROTOTYPE( void fxrstor, (void *)); +_PROTOTYPE( void frstor, (void *)); _PROTOTYPE( unsigned short fnstsw, (void)); _PROTOTYPE( void fnstcw, (unsigned short* cw)); diff --git a/kernel/arch/i386/sconst.h b/kernel/arch/i386/sconst.h index d48640b6d..5f2bd6e09 100644 --- a/kernel/arch/i386/sconst.h +++ b/kernel/arch/i386/sconst.h @@ -28,7 +28,7 @@ SSREG = SPREG+W P_STACKTOP = SSREG+W FP_SAVE_AREA_P = P_STACKTOP - P_LDT_SEL = FP_SAVE_AREA_P + 536 + P_LDT_SEL = FP_SAVE_AREA_P + 532 P_CR3 = P_LDT_SEL+W P_CR3_V = P_CR3+4 P_LDT = P_CR3_V+W diff --git a/kernel/debug.h b/kernel/debug.h index fc422e62c..ce808f31a 100644 --- a/kernel/debug.h +++ b/kernel/debug.h @@ -37,8 +37,6 @@ */ #define DEBUG_RACE 0 -#define DEBUG_FPUCHECK 1 - /* DEBUG_DUMPIPC dumps all IPC to serial; due to the amount of logging it is * strongly recommended to set "ctty 0" in the boot monitor and run inside a * virtual machine if you enable this; on the hardware it would take forever diff --git a/kernel/proc.c b/kernel/proc.c index 820bda02d..b8cf5cf99 100644 --- a/kernel/proc.c +++ b/kernel/proc.c @@ -257,10 +257,6 @@ PUBLIC void switch_to_user(void) int tlb_must_refresh = 0; #endif - char buf[100]; - u32_t c; - c = crc32(0, buf, 100); - p = get_cpulocal_var(proc_ptr); /* * if the current process is still runnable check the misc flags and let diff --git a/kernel/proto.h b/kernel/proto.h index 9d1090d36..3aae90a34 100644 --- a/kernel/proto.h +++ b/kernel/proto.h @@ -223,9 +223,6 @@ _PROTOTYPE( int copy_msg_to_user, (struct proc * p, message * src, _PROTOTYPE(void switch_address_space, (struct proc * p)); _PROTOTYPE(void release_address_space, (struct proc *pr)); -_PROTOTYPE(void fpu_makechecksum, (struct proc *p)); -_PROTOTYPE(void fpu_verifychecksum, (struct proc *p)); - _PROTOTYPE(void enable_fpu_exception, (void)); _PROTOTYPE(void disable_fpu_exception, (void)); _PROTOTYPE(void release_fpu, (struct proc * p)); diff --git a/kernel/system/do_fork.c b/kernel/system/do_fork.c index f2576843b..0b6236196 100644 --- a/kernel/system/do_fork.c +++ b/kernel/system/do_fork.c @@ -65,13 +65,10 @@ PUBLIC int do_fork(struct proc * caller, message * m_ptr) #if (_MINIX_CHIP == _CHIP_INTEL) rpc->p_seg.p_ldt_sel = old_ldt_sel; /* restore descriptors */ rpc->p_fpu_state.fpu_save_area_p = old_fpu_save_area_p; - if(proc_used_fpu(rpp)) { - fpu_verifychecksum(rpp); + if(proc_used_fpu(rpp)) memcpy(rpc->p_fpu_state.fpu_save_area_p, rpp->p_fpu_state.fpu_save_area_p, FPU_XFP_SIZE); - fpu_verifychecksum(rpc); - } #endif if(++gen >= _ENDPOINT_MAX_GENERATION) /* increase generation */ gen = 1; /* generation number wraparound */ diff --git a/kernel/system/do_mcontext.c b/kernel/system/do_mcontext.c index 4bfc8ff94..c105acf5e 100644 --- a/kernel/system/do_mcontext.c +++ b/kernel/system/do_mcontext.c @@ -86,7 +86,6 @@ PUBLIC int do_setmcontext(struct proc * caller, message * m_ptr) rp->p_misc_flags |= MF_FPU_INITIALIZED; memcpy(rp->p_fpu_state.fpu_save_area_p, &(mc.mc_fpu_state), FPU_XFP_SIZE); - fpu_makechecksum(rp); } else rp->p_misc_flags &= ~MF_FPU_INITIALIZED; /* force reloading FPU in either case */ diff --git a/kernel/system/do_sigreturn.c b/kernel/system/do_sigreturn.c index e8a5232ba..592c8e2a2 100644 --- a/kernel/system/do_sigreturn.c +++ b/kernel/system/do_sigreturn.c @@ -56,10 +56,8 @@ PUBLIC int do_sigreturn(struct proc * caller, message * m_ptr) #if (_MINIX_CHIP == _CHIP_INTEL) if(sc.sc_flags & MF_FPU_INITIALIZED) { - fpu_verifychecksum(rp); memcpy(rp->p_fpu_state.fpu_save_area_p, &sc.sc_fpu_state, FPU_XFP_SIZE); - fpu_makechecksum(rp); rp->p_misc_flags |= MF_FPU_INITIALIZED; /* Restore math usage flag. */ /* force reloading FPU */ release_fpu(rp);